फाइबर (कंप्यूटर विज्ञान): Difference between revisions

From Vigyanwiki
(Created page with "{{short description|Lightweight thread of execution in the field of computer science}} {{Use American English|date=March 2021}} {{Use dmy dates|date=March 2021}} कंप...")
 
No edit summary
Line 3: Line 3:
{{Use dmy dates|date=March 2021}}
{{Use dmy dates|date=March 2021}}


[[कंप्यूटर विज्ञान]] में, फाइबर निष्पादन का एक विशेष रूप से हल्का धागा है।
कंप्यूटर [[कंप्यूटर विज्ञान|विज्ञान]] में, फाइबर निष्पादन का एक विशेष रूप से हल्का धागा है।


धागे की तरह, फाइबर [[पता स्थान]] साझा करते हैं। हालाँकि, फाइबर [[सहकारी मल्टीटास्किंग]] का उपयोग करते हैं जबकि थ्रेड्स [[प्रीमेप्टिव मल्टीटास्किंग]] का उपयोग करते हैं। थ्रेड्स अक्सर व्यस्त थ्रेड को खाली करने और दूसरे थ्रेड को फिर से शुरू करने के लिए कर्नेल के थ्रेड शेड्यूलर पर निर्भर करते हैं; क्रियान्वित करते समय फाइबर दूसरे फाइबर को चलाने के लिए खुद को उपजाते हैं।
धागे की तरह, फाइबर [[पता स्थान]] साझा करते हैं। चूँकि,फाइबर [[सहकारी मल्टीटास्किंग|सहकारी बहुकार्यंन]] का उपयोग करते हैं यद्यपि सूत्र रिक्तिपूर्व [[प्रीमेप्टिव मल्टीटास्किंग|बहुकार्यंन]] का उपयोग करते हैं। सूत्र अधिकांशतः व्यस्त सूत्र  को खाली करने और दूसरे सूत्र  को फिर से प्रारम्भ करने के लिए कर्नेल के सूत्र अनुसूची पर निर्भर करते हैं; क्रियान्वित करते समय फाइबर दूसरे फाइबर को चलाने के लिए खुद को उपजाते हैं।


== धागे, फाइबर और coroutines ==
== धागे, फाइबर और coroutines ==
फाइबर और कर्नेल थ्रेड्स के बीच मुख्य अंतर यह है कि फाइबर प्रीमेप्टिव टाइम-स्लाइसिंग के बजाय सहकारी संदर्भ स्विचिंग का उपयोग करते हैं। वास्तव में, फाइबर संगामिति वर्गीकरण का विस्तार करते हैं:
फाइबर और कर्नेल सूत्र के बीच मुख्य अंतर यह है कि फाइबर रिक्तिपूर्व काल टुकड़ा-टुकड़ा करने की क्रिया के बजाय सहकारी संदर्भ स्विचिंग का उपयोग करते हैं। वास्तव में, तंतु संगामिति वर्गीकरण का विस्तार करते हैं:
* एक ही कंप्यूटर पर, कई प्रक्रियाएँ चल सकती हैं
* एक ही कंप्यूटर पर, कई प्रक्रियाएँ चल सकती हैं
* एक ही प्रक्रिया में, कई धागे चल सकते हैं
* एक ही प्रक्रिया में, कई धागे चल सकते हैं
* एक धागे के भीतर, कई तंतु चल सकते हैं<ref>[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4024.pdf Nat Goodspeed, Oliver Kowalke, 2014-05-22, N4024 Distinguishing coroutines and fibers]</ref> फाइबर्स (कभी-कभी स्टैकफुल कोरआउट्स या उपयोगकर्ता मोड सहकारी रूप से अनुसूचित धागे कहा जाता है) और स्टैकलेस कोरआउट्स (संकलक संश्लेषित राज्य मशीन) विशाल प्रदर्शन और कार्यक्षमता अंतर के साथ दो अलग-अलग प्रोग्रामिंग सुविधाओं का प्रतिनिधित्व करते हैं।<ref>[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1364r0.pdf Gor Nishanov, 2018-11-20, P1364R0 Fibers under the magnifying glass]</ref>
* एक धागे के भीतर, कई फाइबर चल सकते हैं<ref>[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4024.pdf Nat Goodspeed, Oliver Kowalke, 2014-05-22, N4024 Distinguishing coroutines and fibers]</ref> फाइबर (कभी-कभी शेडूअल करोटीएस या उपयोगकर्ता मोड सहकारी रूप से अनुसूचित धागे कहा जाता है) और स्टैकलेस कोरआउट्स (संकलक संश्लेषित राज्य मशीन) विशाल प्रदर्शन और कार्यक्षमता अंतर के साथ दो अलग-अलग प्रोग्रामिंग सुविधाओं का प्रतिनिधित्व करते हैं।<ref>[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1364r0.pdf Gor Nishanov, 2018-11-20, P1364R0 Fibers under the magnifying glass]</ref>




== फायदे और नुकसान ==
== फायदे और नुकसान ==
क्योंकि फाइबर मल्टीटास्क सहकारी रूप से, [[ धागा सुरक्षा ]] प्रीमेप्टिवली शेड्यूल किए गए थ्रेड्स की तुलना में कम समस्या है, और फाइबर कोड लिखते समय [[ spinlock ]]्स और [[परमाणु संचालन]] सहित सिंक्रोनाइज़ेशन निर्माण अनावश्यक हैं, क्योंकि वे अंतर्निहित रूप से सिंक्रोनाइज़ हैं। हालाँकि, कई पुस्तकालय गैर-अवरुद्ध I/O के संचालन की एक विधि के रूप में निहित रूप से एक फाइबर उत्पन्न करते हैं; इस प्रकार, कुछ सावधानी और दस्तावेज़ीकरण पढ़ने की सलाह दी जाती है। एक नुकसान यह है कि फाइबर [[मल्टीप्रोसेसर]] मशीनों का उपयोग प्रीमेप्टिव थ्रेड्स का उपयोग किए बिना भी नहीं कर सकते हैं; हालांकि, एक थ्रेड (कंप्यूटर साइंस) # थ्रेडिंग मॉडल | एम: एन थ्रेडिंग मॉडल जिसमें सीपीयू कोर की तुलना में अधिक प्रीमेप्टिव थ्रेड नहीं हैं, शुद्ध फाइबर या शुद्ध प्रीमेप्टिव थ्रेडिंग से अधिक कुशल हो सकते हैं।
क्योंकि फाइबर बहुकार्यंन सहकारी रूप से होता है, [[ धागा सुरक्षा |धागा सुरक्षा]] प्रीमेप्टिवली शेड्यूल किए गए थ्रेड्स की तुलना में कम समस्या है, और फाइबर कोड लिखते समय [[ spinlock | स्पिंलॉक्स]] और [[परमाणु संचालन]] सहित सिंक्रोनाइज़ेशन निर्माण अनावश्यक हैं, क्योंकि वे अंतर्निहित रूप से सिंक्रोनाइज़ हैं। चूँकि, कई पुस्तकालय गैर-अवरुद्ध आई/के संचालन की एक विधि के रूप में निहित रूप से फाइबर उत्पन्न करते हैं; इस प्रकार, कुछ सावधानी और दस्तावेज़ीकरण पढ़ने की सलाह दी जाती है। एक नुकसान यह है कि फाइबर [[मल्टीप्रोसेसर]] मशीनों का उपयोग प्रीमेप्टिव थ्रेड्स का उपयोग किए बिना भी नहीं कर सकते हैं; यद्यपि, थ्रेड (कंप्यूटर साइंस) # थ्रेडिंग मॉडल होता है | एम: एन थ्रेडिंग मॉडल जिसमें सीपीयू कोर की तुलना में अत्यधिक प्रीमेप्टिव थ्रेड नहीं हैं, शुद्ध तंतु या शुद्ध प्रीमेप्टिव थ्रेडिंग से अत्यधिक कुशल हो सकते हैं।


कुछ सर्वर प्रोग्राम में फाइबर का उपयोग सॉफ्ट ब्लॉक करने के लिए किया जाता है ताकि उनके सिंगल-थ्रेडेड पैरेंट प्रोग्राम काम करना जारी रख सकें। इस डिज़ाइन में, फाइबर का उपयोग ज्यादातर I/O एक्सेस के लिए किया जाता है जिसे CPU प्रोसेसिंग की आवश्यकता नहीं होती है। यह मुख्य कार्यक्रम को जारी रखने की अनुमति देता है कि वह क्या कर रहा है। फाइबर एकल-थ्रेडेड मुख्य कार्यक्रम पर नियंत्रण प्राप्त करते हैं, और जब I/O ऑपरेशन पूरा हो जाता है तो फाइबर जारी रहता है जहां उन्होंने छोड़ा था।
कुछ सर्वर प्रोग्राम में फाइबर का उपयोग सॉफ्ट ब्लॉक करने के लिए किया जाता है ताकि उनके एकल-थ्रेडेड पैरेंट प्रोग्राम काम करना जारी रख सकें। इस डिज़ाइन में, फाइबर का उपयोग ज्यादातर आई/एक्सेस के लिए किया जाता है जिसे सीपीयू प्रोसेसिंग की आवश्यकता नहीं होती है। यह मुख्य कार्यक्रम को जारी रखने की अनुमति देता है कि वह क्या कर रहा है। फाइबर एकल-थ्रेडेड मुख्य कार्यक्रम पर नियंत्रण प्राप्त करते हैं, और जब आई/ओ  ऑपरेशन पूरा हो जाता है तो फाइबर जारी रहता है जहां उन्होंने छोड़ा था।


== [[ऑपरेटिंग सिस्टम]] सपोर्ट ==
== [[ऑपरेटिंग सिस्टम]] सपोर्ट ==
धागे की तुलना में तंतुओं के लिए ऑपरेटिंग सिस्टम से कम समर्थन की आवश्यकता होती है। उन्हें आधुनिक [[यूनिक्स]] सिस्टम में लाइब्रेरी फ़ंक्शंस सेटकॉन्टेक्स्ट का उपयोग करके कार्यान्वित किया जा सकता है | getcontext, setcontext और swapcontext में <code>ucontext.h</code>, [[GNU पोर्टेबल थ्रेड्स]] के रूप में, या असेंबलर में [http://www.boost.org/doc/libs/release/libs/fiber/doc/html/index.html boost.fiber] के रूप में।
धागे की तुलना में फाइबर के लिए ऑपरेटिंग सिस्टम से कम समर्थन की आवश्यकता होती है। उन्हें आधुनिक [[यूनिक्स]] सिस्टम में लाइब्रेरी फ़ंक्शंस सेटकॉन्टेक्स्ट का उपयोग करके कार्यान्वित किया जा सकता है | getcontext, setcontext और swapcontext में <code>ucontext.h</code>, [[GNU पोर्टेबल थ्रेड्स]] के रूप में, या असेंबलर में [http://www.boost.org/doc/libs/release/libs/fiber/doc/html/index.html boost.fiber] के रूप में।


[[ माइक्रोसॉफ़्ट विंडोज़ ]] पर, फाइबर का उपयोग करके बनाया जाता है <code>ConvertThreadToFiber</code> और <code>CreateFiber</code> कॉल; एक फाइबर जो वर्तमान में निलंबित है, किसी भी धागे में फिर से शुरू किया जा सकता है। फाइबर-लोकल स्टोरेज, [[थ्रेड-लोकल स्टोरेज]] के अनुरूप, वेरिएबल्स की अनूठी प्रतियां बनाने के लिए इस्तेमाल किया जा सकता है।<ref name="msdn-fibers">[http://msdn2.microsoft.com/en-us/library/ms682661.aspx Fibers], [[MSDN Library]]</ref>
[[ माइक्रोसॉफ़्ट विंडोज़ ]] पर, फाइबर का उपयोग करके बनाया जाता है <code>ConvertThreadToFiber</code> और <code>CreateFiber</code> कॉल; फाइबर जो वर्तमान में निलंबित है, किसी भी धागे में फिर से शुरू किया जा सकता है। फाइबर-लोकल स्टोरेज, [[थ्रेड-लोकल स्टोरेज]] के अनुरूप, वेरिएबल्स की अनूठी प्रतियां बनाने के लिए इस्तेमाल किया जा सकता है।<ref name="msdn-fibers">[http://msdn2.microsoft.com/en-us/library/ms682661.aspx Fibers], [[MSDN Library]]</ref>
सिम्बियन OS ने अपने सक्रिय अनुसूचक में तंतुओं के समान अवधारणा का उपयोग किया। एक सक्रिय वस्तु ([[सिम्बियन ओएस]]) में सक्रिय अनुसूचक द्वारा निष्पादित किया जाने वाला एक फाइबर होता है जब कई बकाया अतुल्यकालिक कॉलों में से एक पूरा हो जाता है। कई सक्रिय वस्तुओं को निष्पादित करने की प्रतीक्षा की जा सकती है (प्राथमिकता के आधार पर) और प्रत्येक को अपने स्वयं के निष्पादन समय को प्रतिबंधित करना होगा।
सिम्बियन OS ने अपने सक्रिय अनुसूचक में तंतुओं के समान अवधारणा का उपयोग किया। एक सक्रिय वस्तु ([[सिम्बियन ओएस]]) में सक्रिय अनुसूचक द्वारा निष्पादित किया जाने वाला फाइबर होता है जब कई बकाया अतुल्यकालिक कॉलों में से पूरा हो जाता है। कई सक्रिय वस्तुओं को निष्पादित करने की प्रतीक्षा की जा सकती है (प्राथमिकता के आधार पर) और प्रत्येक को अपने स्वयं के निष्पादन समय को प्रतिबंधित करना होगा।


== फाइबर कार्यान्वयन उदाहरण ==
== फाइबर कार्यान्वयन उदाहरण ==
ऑपरेटिंग सिस्टम समर्थन के बिना फाइबर को कार्यान्वित किया जा सकता है, हालांकि कुछ ऑपरेटिंग सिस्टम या पुस्तकालय उनके लिए स्पष्ट समर्थन प्रदान करते हैं।
ऑपरेटिंग सिस्टम समर्थन के बिना तंतु को कार्यान्वित किया जा सकता है, हालांकि कुछ ऑपरेटिंग सिस्टम या पुस्तकालय उनके लिए स्पष्ट समर्थन प्रदान करते हैं।
* Win32 एक फाइबर एपीआई की आपूर्ति करता है<ref>[http://msdn.microsoft.com/en-us/library/ms682402(VS.85).aspx CreateFiber, ''MSDN'']</ref> (Windows NT 3.51 SP3 और बाद में)
* Win32 तंतु एपीआई की आपूर्ति करता है<ref>[http://msdn.microsoft.com/en-us/library/ms682402(VS.85).aspx CreateFiber, ''MSDN'']</ref> (Windows NT 3.51 SP3 और बाद में)
* Boost_(C%2B%2B_libraries)|C++ बूस्ट लाइब्रेरी में [https://www.boost.org/doc/libs/1_78_0/libs/fiber/doc/html/index.html फाइबर क्लास] बूस्ट संस्करण के बाद से है 1.62
* Boost_(C%2B%2B_libraries)|C++ बूस्ट लाइब्रेरी में [https://www.boost.org/doc/libs/1_78_0/libs/fiber/doc/html/index.html फाइबर क्लास] बूस्ट संस्करण के बाद से है 1.62
* [[रूबी (प्रोग्रामिंग भाषा)]] में [[हरे धागे]] थे (संस्करण 1.9 से पहले)
* [[रूबी (प्रोग्रामिंग भाषा)]] में [[हरे धागे]] थे (संस्करण 1.9 से पहले)
* [[नेटस्केप पोर्टेबल रनटाइम]] (एक उपयोगकर्ता-स्थान फाइबर कार्यान्वयन शामिल है)
* [[नेटस्केप पोर्टेबल रनटाइम]] (एक उपयोगकर्ता-स्थान तंतु कार्यान्वयन शामिल है)
* [https://github.com/Adaptv/ribs2 Ribs2]
* [https://github.com/Adaptv/ribs2 Ribs2]
* [[PHP]] संस्करण 8.1 के बाद से<ref>[https://www.php.net/releases/8.1/en.php#fibers PHP 8.1.0 Release Announcement]</ref>
* [[PHP]] संस्करण 8.1 के बाद से<ref>[https://www.php.net/releases/8.1/en.php#fibers PHP 8.1.0 Release Announcement]</ref>

Revision as of 09:31, 27 June 2023

कंप्यूटर विज्ञान में, फाइबर निष्पादन का एक विशेष रूप से हल्का धागा है।

धागे की तरह, फाइबर पता स्थान साझा करते हैं। चूँकि,फाइबर सहकारी बहुकार्यंन का उपयोग करते हैं यद्यपि सूत्र रिक्तिपूर्व बहुकार्यंन का उपयोग करते हैं। सूत्र अधिकांशतः व्यस्त सूत्र को खाली करने और दूसरे सूत्र को फिर से प्रारम्भ करने के लिए कर्नेल के सूत्र अनुसूची पर निर्भर करते हैं; क्रियान्वित करते समय फाइबर दूसरे फाइबर को चलाने के लिए खुद को उपजाते हैं।

धागे, फाइबर और coroutines

फाइबर और कर्नेल सूत्र के बीच मुख्य अंतर यह है कि फाइबर रिक्तिपूर्व काल टुकड़ा-टुकड़ा करने की क्रिया के बजाय सहकारी संदर्भ स्विचिंग का उपयोग करते हैं। वास्तव में, तंतु संगामिति वर्गीकरण का विस्तार करते हैं:

  • एक ही कंप्यूटर पर, कई प्रक्रियाएँ चल सकती हैं
  • एक ही प्रक्रिया में, कई धागे चल सकते हैं
  • एक धागे के भीतर, कई फाइबर चल सकते हैं[1] फाइबर (कभी-कभी शेडूअल करोटीएस या उपयोगकर्ता मोड सहकारी रूप से अनुसूचित धागे कहा जाता है) और स्टैकलेस कोरआउट्स (संकलक संश्लेषित राज्य मशीन) विशाल प्रदर्शन और कार्यक्षमता अंतर के साथ दो अलग-अलग प्रोग्रामिंग सुविधाओं का प्रतिनिधित्व करते हैं।[2]


फायदे और नुकसान

क्योंकि फाइबर बहुकार्यंन सहकारी रूप से होता है, धागा सुरक्षा प्रीमेप्टिवली शेड्यूल किए गए थ्रेड्स की तुलना में कम समस्या है, और फाइबर कोड लिखते समय स्पिंलॉक्स और परमाणु संचालन सहित सिंक्रोनाइज़ेशन निर्माण अनावश्यक हैं, क्योंकि वे अंतर्निहित रूप से सिंक्रोनाइज़ हैं। चूँकि, कई पुस्तकालय गैर-अवरुद्ध आई/ओ के संचालन की एक विधि के रूप में निहित रूप से फाइबर उत्पन्न करते हैं; इस प्रकार, कुछ सावधानी और दस्तावेज़ीकरण पढ़ने की सलाह दी जाती है। एक नुकसान यह है कि फाइबर मल्टीप्रोसेसर मशीनों का उपयोग प्रीमेप्टिव थ्रेड्स का उपयोग किए बिना भी नहीं कर सकते हैं; यद्यपि, थ्रेड (कंप्यूटर साइंस) # थ्रेडिंग मॉडल होता है | एम: एन थ्रेडिंग मॉडल जिसमें सीपीयू कोर की तुलना में अत्यधिक प्रीमेप्टिव थ्रेड नहीं हैं, शुद्ध तंतु या शुद्ध प्रीमेप्टिव थ्रेडिंग से अत्यधिक कुशल हो सकते हैं।

कुछ सर्वर प्रोग्राम में फाइबर का उपयोग सॉफ्ट ब्लॉक करने के लिए किया जाता है ताकि उनके एकल-थ्रेडेड पैरेंट प्रोग्राम काम करना जारी रख सकें। इस डिज़ाइन में, फाइबर का उपयोग ज्यादातर आई/ओ एक्सेस के लिए किया जाता है जिसे सीपीयू प्रोसेसिंग की आवश्यकता नहीं होती है। यह मुख्य कार्यक्रम को जारी रखने की अनुमति देता है कि वह क्या कर रहा है। फाइबर एकल-थ्रेडेड मुख्य कार्यक्रम पर नियंत्रण प्राप्त करते हैं, और जब आई/ओ ऑपरेशन पूरा हो जाता है तो फाइबर जारी रहता है जहां उन्होंने छोड़ा था।

ऑपरेटिंग सिस्टम सपोर्ट

धागे की तुलना में फाइबर के लिए ऑपरेटिंग सिस्टम से कम समर्थन की आवश्यकता होती है। उन्हें आधुनिक यूनिक्स सिस्टम में लाइब्रेरी फ़ंक्शंस सेटकॉन्टेक्स्ट का उपयोग करके कार्यान्वित किया जा सकता है | getcontext, setcontext और swapcontext में ucontext.h, GNU पोर्टेबल थ्रेड्स के रूप में, या असेंबलर में boost.fiber के रूप में।

माइक्रोसॉफ़्ट विंडोज़ पर, फाइबर का उपयोग करके बनाया जाता है ConvertThreadToFiber और CreateFiber कॉल; फाइबर जो वर्तमान में निलंबित है, किसी भी धागे में फिर से शुरू किया जा सकता है। फाइबर-लोकल स्टोरेज, थ्रेड-लोकल स्टोरेज के अनुरूप, वेरिएबल्स की अनूठी प्रतियां बनाने के लिए इस्तेमाल किया जा सकता है।[3] सिम्बियन OS ने अपने सक्रिय अनुसूचक में तंतुओं के समान अवधारणा का उपयोग किया। एक सक्रिय वस्तु (सिम्बियन ओएस) में सक्रिय अनुसूचक द्वारा निष्पादित किया जाने वाला फाइबर होता है जब कई बकाया अतुल्यकालिक कॉलों में से पूरा हो जाता है। कई सक्रिय वस्तुओं को निष्पादित करने की प्रतीक्षा की जा सकती है (प्राथमिकता के आधार पर) और प्रत्येक को अपने स्वयं के निष्पादन समय को प्रतिबंधित करना होगा।

फाइबर कार्यान्वयन उदाहरण

ऑपरेटिंग सिस्टम समर्थन के बिना तंतु को कार्यान्वित किया जा सकता है, हालांकि कुछ ऑपरेटिंग सिस्टम या पुस्तकालय उनके लिए स्पष्ट समर्थन प्रदान करते हैं।


यह भी देखें

संदर्भ


बाहरी संबंध

  • GNU Portable threads
  • "Portable Coroutine Library". Freecode.
  • Fiber Pool A multicore-capable C++ framework based on fibers for Microsoft Windows.
  • State Threads
  • Protothreads
  • ribs2
  • boost.fiber