# இணைக் கணிப்பீடு

## பின்னணி

### பந்தய நிலைகள், பரிமாற்றுத் தவிர்க்கை, ஒத்தியக்கல் மற்றும் இணை வேகக் குறைவு

ஒரு இணை நிரலில் இருக்கும் உபப்பணிகள் அடிக்கடி திரிகள் (threads) என்று அழைக்கப்படுகிறது. சில இணை கணினிக் கட்டமைப்புகள் இழைகள் எனப்படும் சிறிய, எடைகுறைந்த திரிப் பதிப்புகளைப் பயன்படுத்துகின்றன, அதே நேரத்தில் மற்றவை செயல்முறைகள் எனப்படும் பெரும் பதிப்புகளைப் பயன்படுத்துகின்றன. எனினும் "திரிகள்" என்பது உபப் பணிகளுக்கான ஒரு பொதுவான சொல்லாக ஏற்றுக்கொள்ளப்பட்டுள்ளது. அவற்றுக்கிடையில் பகிர்ந்துகொள்ளப்பட்டும் சில மாறுபாடுகளை திரிகள் அடிக்கடி புதுப்பித்துக் கொள்ள வேண்டியிருக்கிறது. இரு நிரல்களுக்கிடையே இருக்கும் நெறிமுறைகள் எந்தவொரு வரிசைமுறையிலும் இடைவெளியிடப்பட்டிருக்கும். உதாரணத்திற்குப் பின்வரும் நிரலை கருத்தில் கொள்ளுங்கள்:  
| திரி A | திரி B |  |
| --- | --- | --- |
| 1A: Read variable V | 1B: Read variable V |  |
| 2A: Add 1 to variable V | 2B: Add 1 to variable V |  |
| 3A Write back to variable V | 3B: Write back to variable V | } |  
நெறிமுறைகள் 1A மற்றும் 3A வுக்கு இடையில் 1B செயல்படுத்தப்பட்டிருந்தால் அல்லது நெறிமுறைகள் 1B மற்றும் 3B வுக்கு இடையில் நெறிமுறை 1A செயல்படுத்தப்பட்டிருந்தால் நிரலானது தவறான தரவை வெளிப்படுத்தும். இது பந்தய நிலை என அறியப்படுகிறது. பரிமாற்றுத் தவிர்க்கையை வழங்குவதற்கு நிரலாக்குநர் ஒரு பூட்டைப் பயன்படுத்தவேண்டும். இங்கு பூட்டு என்பது ஒரு நிரலாக்க மொழி கட்டமைப்பாகும், இது ஒரு திரியை ஒரு வேறுபாட்டின் மீது கட்டுப்பாடு செலுத்த அனுமதிக்கிறது மற்றும் அந்த வேறுபாட்டின் பூட்டு அவிழ்க்கப்படும் வரையில் இதர திரிகள் அதனைப் படிக்கவும் அதன் மீது எழுதவும் தடை செய்கிறது. பூட்டைக் கொண்டிருக்கும் திரி தன்னுடைய மாறுநிலைப் பிரிவை (சில வேறுபாடுகளுக்கு தனியுரிமை அணுக்கம் தேவைப்படும் நிரலின் பிரிவு) செயல்படுத்துவதில் மற்றும் அது முழுமையடைந்தவுடன் தரவு பூட்டினை அவிழ்ப்பதற்கும் எந்தக் கட்டுப்பாட்டையும் கொண்டிருப்பதில்லை. இதனால் சரியான நிரல் செயல்படுத்துதலை உறுதிப்படுத்துவதற்கு மேலிருக்கும் நிரல் பூட்டைப் பயன்படுத்துவதற்கு பின்வருமாறு மாற்றி எழுதப்படலாம்:  
| திரி A | திரி B |  |
| --- | --- | --- |
| 1A: Lock variable V | 1B: Lock variable V |  |
| 2A: Read variable V | 2B: Read variable V |  |
| 3A: Add 1 to variable V | 3B: Add 1 to variable V |  |
| 4A Write back to variable V | 4B: Write back to variable V |  |
| 5A: Unlock variable V | 5B: Unlock variable V | } |  
ஒரு திரி வேறுபாடு V யை வெற்றிகரமாக பூட்டிவிடும், அதே நேரத்தில் இதர திரிகள் பூட்டப்பெற்ற நிலை கொள்ளும்— V மீண்டும் பூட்டு அவிழ்க்கப்படும் வரையில் முன்னரே இயலாததாகிவிடும். இது நிரல் சரிவர செயல்படுதலை உறுதிப்படுத்துகிறது. பூட்டுகள் சரியான நிரல் செயல்படுதலை உறுதிப்படுத்துவதற்குத் தேவைப்பட்ட போதிலும் ஒரு நிரலை பெருமளவில் மெதுவாக செயல்பட வைக்கும்.  
அணுவற்ற பூட்டுகளைப் பயன்படுத்தி பன்மடங்கு வேறுபாடுடையவற்றைப் பூட்டுவது நிரல் முடக்கம் அடையும் வாய்ப்பினைக் கொண்டிருக்கிறது. ஒரு அணு பூட்டு பன்மடங்கு வேறுபாடுடையவை அனைத்தையும் ஒரே நேரத்தில் பூட்டிவிடுகிறது. அதனால் எல்லாவற்றையும் பூட்ட முடியாவிட்டால், எந்த ஒன்றையும் அது பூட்டாது. இரு திரிகள் ஒவ்வொன்றும் அணுவற்ற பூட்டுகளைப் பயன்படுத்தி ஒரே இரு வேறுபாடுடையவற்றைப் பூட்ட வேண்டியிருந்தால், அவற்றில் ஒன்றை ஒரு திரியும் இரண்டாவது திரி இரண்டாவது வேறுபாடுடையவற்றைப் பூட்டும் சாத்தியக்கூறுகள் இருக்கின்றன. அத்தகைய ஒரு நிலையில் இரு திரிகளும் முழுமைப்படுத்தாது மற்றும் முடிவுகளை முடக்கும்.  
பல இணை நிரல்களுக்கு தங்கள் உபப் பணிகள் ஒத்தியக்கத்தில் செயல்பட வேண்டியிருக்கிறது. இதற்கு அடைப்புகளின் பயன்பாடு தேவைப்படுகிறது. அடைப்புகள் வழக்கமாக ஒரு மென்பொருள் பூட்டைப் பயன்படுத்தி செயற்படுத்தப்படுகிறது. பூட்டுகளற்ற மற்றும் காத்திருப்புகளற்ற படித்தீர்வுகள் எனப்படும் படித்தீர்வுகளின் ஒரு பிரிவு ஒட்டுமொத்தமாக பூட்டுகள் மற்றும் அடைப்புகளின் பயன்பாட்டைத் தவிர்க்கிறது. எனினும், இந்த அணுகுமுறையை நடைமுறைப்படுத்துவது பொதுவாகவே கடினமானதாகும் மேலும் அதற்கு சரியாக வடிவமைக்கப்பட்ட தரவுக் கட்டமைப்புகள் தேவைப்படுகிறது.  
எல்லா இணைப்படுத்தப்படுதல்களும் வேகமாக்கப்படும் விளைவை அடைவதில்லை. பொதுவாக, ஒரு பணி மேலும் மேலும் திரிகளாக உடைக்கப்படும் போது அந்தத் திரிகள் தங்களுடைய எப்போதுமே அதிகரித்துவரும் நேரப் பகுதியை ஒன்றுடன் மற்றொன்று தகவல்தொடர்பு கொள்வதிலேயே செலவிடுகின்றன. இதன் விளைவாக, சிக்கலைத் தீர்ப்பதில் எடுத்துக்கொள்ளப்படும் நேரத்தின் பெரும்பகுதி தகவல்தொடர்பு ஆக்கிரமித்துக்கொள்கிறது மற்றும் கூடுதலான இணைப்படுத்தப்படுதல் (அதாவது, வேலைப்பளுவை மேலும் அதிக திரிகளுக்குப் பிரித்துக்கொடுத்தல்) முழுமைப்படுத்தலுக்குத் தேவைப்படும் நேர அளவினைக் குறைப்பதற்குப் பதிலாக அதிகரிக்கச் செய்கிறது. இது இணை வேகக் குறைப்பு என அறியப்படுகிறது.