சி ஷார்ப்பும்
மல்டிதிரட்டிங்கும்
மல்டிதிரட்டிங்
என்றால் என்ன?
மல்டிதிரட்டிங் நிரல் ஆனது ஒரே நேரத்தில் இயங்கக்கூடிய ஒன்றுக்கு மேற்பட்ட பகுதிகளைக் கொண்டிருக்கும். ஒவ்வொரு பகுதியும் ஒரு திரட் ஆகும்.ஒவ்வொரு திரட்டும் வெவ்வேறு பாதைகளில் இயங்கக்கூடியது. மல்டிதிரட்டிங் என்பது மல்டி பிராசஸிங்கில் இருந்து வேறுபடக்கூடியது.
மல்டிதிரட்டிங் நிரல் ஆனது ஒரே நேரத்தில் இயங்கக்கூடிய ஒன்றுக்கு மேற்பட்ட பகுதிகளைக் கொண்டிருக்கும். ஒவ்வொரு பகுதியும் ஒரு திரட் ஆகும்.ஒவ்வொரு திரட்டும் வெவ்வேறு பாதைகளில் இயங்கக்கூடியது. மல்டிதிரட்டிங் என்பது மல்டி பிராசஸிங்கில் இருந்து வேறுபடக்கூடியது.
மல்டிதிரட்டிங்
அவசியம் என்ன?
கம்ப்யூட்டரின்
சிபியு ஆனது ஒரு நேரத்தில் ஒரு வேலையைச் செய்யும். சிபியு ஆனது input/output சாதனங்களுடன் தகவல் பரிமாற்றம் செய்யும் போது அவற்றிற்காக
காத்திருக்க வேண்டியுள்ளது..ஏனெனில் input/output
சாதனங்கள்
சிபியுவை விட மெதுவனதாகும்.எனவே ஒரு நிரல் ஆனது அதன் பெரும்பாலான நேரத்தை தகவல்
பரிமாற்றத்திற்காக காத்திருப்பதில் செவழிக்கின்றது.எனவே மல்டிதிரட்டிங் ஆனது
,நிரலின் ஒரு பகுதி தகவல் பரிமாற்றத்திற்காக காத்திருக்கையில் மற்றொரு பகுதியை
இயங்குவதற்கு அனுமதிக்கின்றது.
மல்டி பிராசஸிங்
மற்றும் மல்டிதிரட்டிங் வேறுபாடு:
மல்டி டாஸ்கிங்
ஆனது மல்டிதிரட்டிங் மற்றும் மல்டி பிராசஸிங் என இரு கருத்துக்களை கொண்டது. ஒரு பிராசஸ்
என்பது ஒரு இயங்கும் நிரல் ஆகும். அதாவது மல்டி பிராசஸிங் என்பது சிபியுவால்
ஒன்றுக்கு மேற்பட்ட நிரல்களை ஒரே நேரத்தில் இயக்க பயன்படுகின்றது. உதாரணமாக நாம் ஒரு வேர்ட் டாக்குமெண்ட்டை
பிரிண்ட் செய்துகொண்டு அதே நேரத்தி எக்சலில் Data
entry செய்ய முடியும்.
மல்டி
பிராசஸிங்கில் இருப்பதிலேயே சிறிய பகுதியானது ஒரு நிரல் ஆகும். மல்டிதிரட்டிங்கில்
இருப்பதிலேயே சிறிய பகுதியானது ஒரு திரட் ஆகும். அதாவது ஒரு நிரலின் ஒரு
பகுதியாகும்.ஒவ்வொரு பகுதியும் ஒரு திரட் எனப்படுகின்றது. மல்டிதிரட்டிங்கில் ஒரே
நிரலின் வெவ்வேறு பகுதிகள் ஒரே நேரத்தில் இயங்கும். அதாவது word ல் ஒரு பக்கம் பிரிண்ட் செய்து கொண்டு
மற்றொரு பக்கம்
அதே வேர்டில் formatting செய்யலாம்.
அதாவது மல்டி
மல்டி பிராசஸிங் என்பது ஒரே நேரத்தில் வெவ்வேறு நிரல்கள் இயங்கக்கூடியது.
மல்டிதிரட்டிங் என்பது ஒரு நேரத்தில் ஓரே நிரலின் வெவ்வேறு பகுதிகள் இயங்கக்
கூடியது.இரண்டின் நோனக்கமும் சிபியுவின் வாளா இருக்கும் நேரத்தை குறைப்பதாகும்.
மல்டிதிரட்டிங்
க்ளாஸ்கள்:
சி#ல்
மல்டிதிரட்டிங்கிற்காக .net frameworkல் க்ளாஸ்கள் இருக்கின்றது.இவையாவன system நேம்பேஸில் உள்ள thread
என்ற சப் நேம்
பேசில் உள்ளன.Thread அவற்றில் முதன்மை கிளாஸாக இருக்கின்றது.
சி ஷார்ப் 4
உடன் மல்டிதிரட்டிங்:
சி ஷார்ப் 4ல் மல்டிதிரட்டிங்கிற்கென கூடுதல் பகுதிகள் இணைக்கப் பட்டுள்ளன. அவையாவன Task Parallel library(TPL) மற்றும் Parallel
LINQ(PLINQ). இரண்டுமே இணையாக
இயங்கும் நிரல்களை ஆதரிக்கின்றது..மேலும் அவை Multi
processor(multi core) கணினிகளை ஆதரிக்கின்றது.TPL
ஆனது மல்டிதிரட்டிங்
பயன்பாடுகளைஉருவாக்கவும்
அவற்றை மேலாண்மை செய்யவும் பயன்படுகின்றது.
திரட்டின்
நிலைகள் ;
திரட் ஆனது
வெவ்வேறு நியோலைகளை கொண்டுள்ளது.அதாவது இயங்கக்கூடிய(running)மற்றும் இயங்குவதற்கு தயாராக உள்ள(ready to run)நிலை..அதே போல் suspended
நிலையிலும்
பிறகு resumed நிலையிலும் இருக்கலாம். ஒரு திரட் ஆனது resource க்காக காத்திருக்கும் நிலையிலும் தடை(blocked) செய்யப்படலாம்.
சி ஷார்ப்பில்
இரண்டு விதமான திரட்களை உருவாக்கலாம். அவையாவன foreground
மற்றும் background திரட்கள் ஒரு திரட் ஆனது உருவாக்கப்படுகையில்
Foreground ஆக உருவாக்கப் படுகின்றது.அவற்றை நாம் background ஆக மாற்றலாம்,. எல்லா foreground திரல்களும் முடிகையில் எல்ல background திரட்களும் முடிவுக்கு வரும்.
நிரலில்
குறிப்பிட்டுள்ள செயல் பாட்டை ஒன்றுக்கு மேற்பட்ட திரட்கள் நிறைவேற்ற முயல்கையில்
அச்செயல்பாடு lock செய்யப்பட வேண்டும்.இவ்வாறு திரட்டில்
செயல்பாட்டினை முறைப்படுத்துவது ஒத்தியக்கம்(Threading
synchronization) எனப்படுகின்றது.
எல்லா
நிரல்களும் ஒரு main thread ஐ கொண்டிருக்கின்றன.இவை நிரல் தொடங்கும் போது தானாகவே இயங்க
தொடங்குகின்றன.
C# மற்றும் .Net
framework ஆனது process based மற்றும் thread based என இரண்டு வகையான multitasking களை ஆதரிக்கின்றன.
System.Threading என்ற நேம்பேஸில் multi threading க்கிற்கான class
கள் உள்ளன. எனவே
இந்த நேம்பேஸானது ப்ரொக்ராமில் இம்போர்ட் செய்யப்பட வேண்டும்.
using System.Threading;
திரட் கிளாஸ்:
Thread கிளாஸ் ஒரு sealed class ஆகும். எனவே இதை inherit செய்ய இயலாது. Thread
classல் சில
ப்ராப்பர்டிகளும் மற்றும் மெத்தட்களும் வரையறுக்கப்பட்டுள்ளன. இவை thread ஐ manage செய்வதற்கு பயன்படுகின்றது.
ஒரு த்ரெட் அனது
உருவாக்குவதற்கு Thread class க்கு object create செய்யப்பட வேண்டும். Thread class ன் constructor பின் வருமாரு இருக்கும்.
public Thread(ThreadStart start)
இங்கு start ஆனது த்ரட் எந்த மெத்தட்டை இயக்க வேண்டும்
என்பதை குறிகின்றது.
ThreadStart ஆனது ஒரு delegate ஆகும். இது frameworkல் பின் வருமாறு define செய்யப்பட்டுள்ளது.
public delegate void ThreadStart( )
எனவே த்ரட் மெத்தட்
ஆனது void இருக்க வேண்டும். மற்றும் எந்த argument ம் ஏறக கூடாது.
த்ரட் ஆனது Thread class
ன் start method
அழைக்கப்படும் வரை
இயக்கப்படாது.
using
System;
using
System.Threading;
class
MyThread {
public
int Count;
string
thrdName;
public
MyThread(string name) {
Count
= 0;
thrdName
= name;
}
//
Entry point of thread.
public
void Run() {
Console.WriteLine(thrdName
+ " starting.");
do
{
Thread.Sleep(500);
Console.WriteLine("In
" + thrdName +
",
Count is " + Count);
Count++;
}
while(Count < 10);
Console.WriteLine(thrdName
+ " terminating.");
}
}
class
MultiThread {
static
void Main() {
Console.WriteLine("Main
thread starting.");
//
First, construct a MyThread object.
MyThread
mt = new MyThread("Child #1");
//
Next, construct a thread from that object.
Thread
newThrd = new Thread(mt.Run);
//
Finally, start execution of the thread.
newThrd.Start();
do
{
Console.Write(".");
Thread.Sleep(100);
}
while (mt.Count != 10);
Console.WriteLine("Main
thread ending.");
}
}
இங்கு MyThread
class ஆனது Run என்கின்ற மெத்தடை கொண்டுள்ளது. இது count
என்கின்ற
வேரியபிளை 0 to 9 increment செய்கின்றது.
Sleep எங்கின்ற மெத்தட் அழைக்கப்ப்டுவதை கவனிக்கவும். இது Thread classல் டிஃபைன் செய்ய்ப்பட்டுள்ள ஒரு static method ஆகும்.
Sleep method ஆனது த்ரட்டை குறிப்பிட்ட மில்லி செகண்டுகளுக்கு suspend செய்கின்றது.
Main methodக்கு உள்ளே த்ரட்
ஆனது பின் வரும் வரிகளால் உருவாக்கப்பட்டு அழைக்கப்படுகிறது.
MyThread mt = new MyThread("Child #1");
MyThread mt = new MyThread("Child #1");
//
Next, construct a thread from that object.
Thread
newThrd = new Thread(mt.Run);
//
Finally, start execution of the thread.
newThrd.Start();
start method
ஆனது run method அழைக்கின்றது. Run method
suspend செய்யப்படும் போது main
method க்கு திரும்பி அதன் do loopகுள் என்டெர்
ஆகின்றது. இரண்டு த்ரடடுகளும் இயங்குகின்றன.
Output:
Main
thread starting.
Child
#1 starting.
.....In
Child #1, Count is 0
.....In
Child #1, Count is 1
.....In
Child #1, Count is 2
.....In
Child #1, Count is 3
.....In
Child #1, Count is 4
.....In
Child #1, Count is 5
.....In
Child #1, Count is 6
.....In
Child #1, Count is 7
.....In
Child #1, Count is 8
.....In
Child #1, Count is 9
Child
#1 terminating.
Main
thread ending.
-நன்றி
முத்து கார்த்திகேயன்,மதுரை.
No comments:
Post a Comment