ത്രെഡ്ഡിങ്

കംപ്യൂട്ടറിൽ പ്രാവർത്തികമാക്കപ്പെടുന്ന "പ്രോസസ്സിനെ" ഒന്നിലേറെ പ്രക്രിയകളാക്കി വേർതിരിച്ച് അവയെ ഒരേ സമയത്തുതന്നെ നടപ്പിൽ വരുത്തുവാനുള്ള മൾട്ടിടാസ്കിങ് സംവിധാനമാണ് **ത്രെഡ്ഡിങ്**. കെർണൽ ഷെഡ്യൂളിങ്ങിൽ ഏറ്റവും 'ഭാരം കുറഞ്ഞ' ഘടകമാണ് ത്രെഡ്. ഓരോ പ്രോസസ്സിലും കുറഞ്ഞത് ഒരു ത്രെഡ് എങ്കിലും പ്രവർത്തിക്കുന്നുണ്ടാകും. പ്രോസസ്സിന്റെ അവസ്ഥാവിവരങ്ങൾ പൂർണമായും അതിന്റെ എല്ലാ ത്രെഡ്ഡുകളിലും ലഭ്യമായിരിക്കും. കൂടാതെ കംപ്യൂട്ടറിന്റെ മെമ്മറി, അഡ്രസ് സ്പേസ്, ഇതര വിഭവ ശേഷി മുതലായവയെ പങ്കുവച്ച് ഉപയോഗപ്പെടുത്താൻ ത്രെഡ്ഡുകൾ സൗകര്യമേകുന്നു. വ്യത്യസ്ത പ്രോസസ്സുകളെ തമ്മിൽ കോൺടെക്സ്റ്റ് സ്വിച്ചിങ് നടത്തുന്നതിനെക്കാൾ വേഗതയിൽ ഒരേ പ്രോസസ്സിന്റെ വിവിധ ത്രെഡ്ഡുകൾ തമ്മിൽ കോൺടെക്സ്റ്റ് സ്വിച്ചിങ് നടത്തുവാൻ കഴിയുന്നു എന്നത് ത്രെഡ്ഡുകളുടെ മറ്റൊരു സവിശേഷതയാണ്.

ഏക പ്രോസസ്സർ കംപ്യൂട്ടറിൽ ഒരു സമയത്ത് ഒരു ത്രെഡ് മാത്രമേ പ്രാവർത്തികമാക്കാൻ കഴിയൂ.  ത്രെഡ്ഡുകൾ തമ്മിലുള്ള കോൺടെക്സ്റ്റ് സ്വിച്ചിങ് വേഗത്തിലായതിനാൽ ത്രെഡ്ഡുകളെല്ലാം ഒരേ സമയത്തുതന്നെ നടപ്പിലാകുന്നു എന്ന തോന്നൽ ഉപയോക്താവിന് ഉണ്ടാകുന്നു. എന്നാൽ, ഒന്നിലേറെ പ്രോസസ്സർ ഉള്ള മൾട്ടിപ്രോസസ്സർ ക്രമീകരണം, ക്ളസ്റ്റർ സംവിധാനം മുതലായവയിൽ വിവിധ പ്രോസസ്സറുകളിലായി വ്യത്യസ്ത ത്രെഡ്ഡുകൾ ഒരേ സമയത്തുതന്നെ പ്രാവർത്തികമാക്കപ്പെടും.

ഇന്ന് വിപണിയിൽ ലഭ്യമാകുന്ന മിക്ക ഓപ്പറേറ്റിങ് സിസ്റ്റങ്ങളും ത്രെഡ്ഡിങ് അനുവദിക്കുന്നവയാണ്. ഇവയുടെ സിസ്റ്റം കെർണലിലൂടെ സിസ്റ്റം കോൾ ഇന്റർഫേസ് ഉപയോഗപ്പെടുത്തി പ്രോഗാമർക്ക് ത്രെഡ്ഡുകൾ ചിട്ടപ്പെടുത്താം. ഓപ്പറേറ്റിങ് സിസ്റ്റത്തിൽ  ത്രെഡ്ഡുകൾ പൊതുവേ രണ്ട് രീതിയിലാണ് നടപ്പിലാക്കപ്പെടുന്നത്. പ്രിയെംറ്റീവ് മൾട്ടിത്രെഡ്ഡിങ്, കോ-ഓപ്പറേറ്റീവ് മൾട്ടിത്രെഡ്ഡിങ് എന്നിവയാണ് ഇവ. ത്രെഡ്ഡുകൾ തമ്മിലുള്ള കോൺടെക്സ്റ്റ് സ്വിച്ചിങ് എപ്പോൾ വേണമെന്ന് നിശ്ചയിക്കുന്നതിനുള്ള ചുമതല ആർക്കായിരിക്കും എന്നതനുസരിച്ചാണ് ഇവിടത്തെ വർഗീകരണം. ആദ്യത്തെ രീതിയിലാണ് ക്രമീകരണമെങ്കിൽ അതിനുള്ള ചുമതല ഓപ്പറേറ്റിങ് സിസ്റ്റത്തിനാണ്; രണ്ടാമത്തേതിൽ അത് ത്രെഡ്ഡു തന്നെ നിർവഹിക്കുന്നു.
## ചരിത്രം
1967-ൽ വേരിയബിൾ നമ്പർ ഓഫ് ടാസ്‌ക്കുകളുള്ള (MVT) OS/360 മൾട്ടിപ്രോഗ്രാമിംഗിൽ "ടാസ്‌ക്കുകൾ" എന്ന പേരിൽ ത്രെഡുകൾ നേരത്തെ തന്നെ ആരംഭിച്ചിരുന്നു. സാൾട്ട്‌സർ (1966) "ത്രെഡ്" എന്ന പദം കൊണ്ട് വന്നതിന്റെ ക്രെഡിറ്റ് വിക്ടർ എ. വിസ്സോറ്റ്‌സ്‌കിക്ക് നൽകുന്നു.

2003-ഓടെ ത്രെഡിംഗിന്റെ ജനപ്രീതി വർദ്ധിച്ചു, സിപിയു ഫ്രീക്വൻസിയുടെ വളർച്ചയ്ക്ക് പകരം കോറുകളുടെ എണ്ണത്തിന്റെ വർദ്ധനവ് ഉണ്ടായി, ഒന്നിലധികം കോറുകൾ ഉപയോഗിക്കുന്നതിന് കൺകറൻസി ആവശ്യമായി വന്നു.
## ബന്ധപ്പെട്ട ആശയങ്ങൾ
ഷെഡ്യൂളിംഗ് കേർണൽ തലത്തിലോ ഉപയോക്തൃ തലത്തിലോ നടത്താം, കൂടാതെ മൾട്ടിടാസ്‌കിംഗ് മറ്റാരെങ്കിലും ചെയ്യുന്നതിന് മുന്നേയോ അല്ലെങ്കിൽ പരസ്പരം സഹകരിച്ചോ ചെയ്യാം. ഇത് വിവിധ  ആശയങ്ങൾ നൽകുന്നു.
### പ്രോസസ്സ്
പ്രോസസ് ഒരു വലിയ ജോലി അല്ലെങ്കിൽ പ്രവർത്തനമാണ്, അതിൽ ഉള്ളതിൽ പല ചെറുതായി പ്രവർത്തിക്കുന്ന ഭാഗങ്ങൾ ത്രെഡുകൾ ആകുന്നു. പ്രോസസ്സ് ഒരു വലിയ പദ്ധതി പോലെയാണ്, അതിൽ നിരവധി ചെറിയ ടാസ്കുകൾ (ത്രെഡുകൾ) ഒരുമിച്ച് പ്രവർത്തിച്ച് ആ ജോലി പൂർത്തിയാക്കുന്നു. കെർണൽ ഷെഡ്യൂളിംഗ്(Kernel scheduling) എന്നത് പ്രോസസുകൾ എങ്ങനെ സിപിയു ഉപയോഗിക്കണം എന്ന് കെർണൽ തീരുമാനിക്കുന്നു. പ്രീഎംപ്റ്റീവ് ഷെഡ്യൂളിംഗിൽ(Preemptive scheduling), പ്രോസസ്സ് പ്രവർത്തിക്കുന്നതിനിടെ മറ്റൊരു പ്രോസസ്സ് സിപിയു നേടുന്നതിന് അനുവദിക്കുന്നു. കോ-ഓപ്പറേറ്റീവ് ഷെഡ്യൂളിങിൽ(Cooperative scheduling), പ്രോസസ്സ് സ്വയം സിപിയു വിട്ട് മറ്റൊന്നിന് അവസരം നൽകണം. ഉപയോക്തൃ തലത്തിൽ, ഒരു പ്രോഗ്രാമിന്റെ ഉള്ളിൽ പല ത്രെഡുകൾ (അഥവാ പ്രവർത്തനങ്ങൾ) ഒരേസമയം റൺ ചെയ്യാൻ ഒരു സിസ്റ്റം ഒരുക്കാം. ഇതിന്റെ അർത്ഥം, ഓപ്പറേറ്റിംഗ് സിസ്റ്റം  അവ മാനേജു ചെയ്യാൻ നോക്കുന്നില്ല, പകരം പ്രോഗ്രാം തന്നെ അതിനെ നിയന്ത്രിക്കുന്നു. അതിനാൽ, പ്രോഗ്രാമിന് അതിന്റെ പ്രവർത്തനങ്ങൾ നിയന്ത്രിക്കാൻ കൂടുതൽ സ്വാതന്ത്ര്യം ലഭിക്കുന്നു. ഏതെങ്കിലും പ്രോഗ്രാമിൽ, പ്രോസസുകൾ അല്ലെങ്കിൽ ത്രെഡുകൾ ഡാറ്റ എങ്ങനെ പങ്കുവെക്കുന്നു എന്നതിനൊപ്പം വ്യത്യാസപ്പെടുന്നു. എർലാങ്(Erlang) പോലുള്ള സിസ്റ്റങ്ങളിലെ പ്രോസസുകൾ തമ്മിൽ ഡാറ്റ പങ്കുവെക്കാറില്ല, അവ സ്വന്തമായി പ്രവർത്തിക്കുന്നവയാണ്. എന്നാൽ, ത്രെഡുകൾ തമ്മിൽ ഡാറ്റ പങ്കുവെക്കുമ്പോൾ, അവ പ്രോഗ്രാമിന്റെ ഭാഗമായിട്ട് ഒന്നിച്ച് പ്രവർത്തിക്കുന്നു, പ്രത്യേകിച്ച്, അവ മുൻകൂർ നിയന്ത്രണം നൽകുന്ന രീതിയിൽ പ്രവർത്തിക്കുന്നതാണെങ്കിൽ. "ഫൈബേഴ്സ്" എന്ന് പറഞ്ഞാൽ, ചില ഉപയോക്തൃ ത്രെഡുകൾ തമ്മിൽ ചേർന്ന് പ്രവർത്തിക്കാൻ സംവിധാനം ഒരുക്കുന്ന രീതി ആണ്. ഓരോ പ്രോസസ്സും തങ്ങളുടെ ത്രെഡുകൾ വ്യത്യസ്തമായി ക്രമീകരിക്കും. ഉപയോക്തൃ ത്രെഡുകൾ കെർണൽ ത്രെഡുകൾ ഉപയോഗിച്ച് പ്രവർത്തിക്കുന്നതിന് വേണ്ടി, അത് പലവിധം (one-to-one, many-to-one, many-to-many) പ്രവർത്തിക്കാം. "ലൈറ്റ്-വെയിറ്റ് പ്രോസസ്" എന്നത്, ഉപയോക്തൃ ത്രെഡുകൾ അല്ലെങ്കിൽ അവയുടെ ക്രമീകരണത്തിനായുള്ള കെർണൽ മാർഗ്ഗങ്ങളെ കുറിച്ചുള്ള പദമാണ്.

## അവലംബം

## ഇതും കാണുക
* David R. Butenhof: *Programming with POSIX Threads*, Addison-Wesley, ISBN 0-201-63392-2
* Bradford Nichols, Dick Buttlar, Jacqueline Proulx Farell: *Pthreads Programming*, O'Reilly & Associates, ISBN 1-56592-115-1
* Charles J. Northrup: *Programming with UNIX Threads*, John Wiley & Sons, ISBN 0-471-13751-0
* Mark Walmsley: *Multi-Threaded Programming in C++*, Springer, ISBN 1-85233-146-1
* Paul Hyde: *Java Thread Programming*, Sams, ISBN 0-672-31585-8
* Bill Lewis: *Threads Primer: A Guide to Multithreaded Programming*, Prentice Hall, ISBN 0-13-443698-9
* Steve Kleiman, Devang Shah, Bart Smaalders: *Programming With Threads*, SunSoft Press, ISBN 0-13-172389-8
* Pat Villani: *Advanced WIN32 Programming: Files, Threads, and Process Synchronization*, Harpercollins Publishers, ISBN 0-87930-563-0
* Jim Beveridge, Robert Wiener: *Multithreading Applications in Win32*, Addison-Wesley, ISBN 0-201-44234-5
* Thuan Q. Pham, Pankaj K. Garg: *Multithreaded Programming with Windows NT*,  Prentice Hall, ISBN 0-13-120643-5
* Len Dorfman, Marc J. Neuberger: *Effective Multithreading in OS/2*, McGraw-Hill Osborne Media, ISBN 0-07-017841-0
* Alan Burns, Andy Wellings: *Concurrency in ADA*, Cambridge University Press, ISBN 0-521-62911-X
* Uresh Vahalia: *Unix Internals: the New Frontiers*, Prentice Hall, ISBN 0-13-101908-2
* Alan L. Dennis:  *.Net Multithreading *, Manning Publications Company, ISBN 1-930110-54-5
* Tobin Titus, Fabio Claudio Ferracchiati, Srinivasa Sivakumar, Tejaswi Redkar, Sandra Gopikrishna: *C# Threading Handbook*, Peer Information Inc, ISBN 1-86100-829-5
* Tobin Titus, Fabio Claudio Ferracchiati, Srinivasa Sivakumar, Tejaswi Redkar, Sandra Gopikrishna: *Visual Basic .Net Threading Handbook*, Wrox Press Inc, ISBN 1-86100-713-2

വർഗ്ഗം:ഓപ്പറേറ്റിങ് സിസ്റ്റം ഘടകങ്ങൾ