மல்டிதிரட்டிங்
என்றால் என்ன?
மல்டிதிரட்டிங் நிரல் ஆனது ஒரே நேரத்தில் இயங்கக்கூடிய ஒன்றுக்கு மேற்பட்ட பகுதிகளைக் கொண்டிருக்கும். ஒவ்வொரு பகுதியும் ஒரு திரட் ஆகும்.ஒவ்வொரு திரட்டும் வெவ்வேறு பாதைகளில் இயங்கக்கூடியது. மல்டிதிரட்டிங் என்பது மல்டி பிராசஸிங்கில் இருந்து வேறுபடக்கூடியது.
மல்டிதிரட்டிங்
அவசியம் என்ன?
கம்ப்யூட்டரின்
சிபியு ஆனது ஒரு நேரத்தில் ஒரு வேலையைச் செய்யும். சிபியு ஆனது 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");
// 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