Monday, January 21, 2019

டாட்நெட் தொழில் நுட்பம் கற்றுக் கொள்வோம் –பகுதி-21


சி ஷார்ப்பும் மல்டிதிரட்டிங்கும்



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


ads Udanz

No comments:

Post a Comment