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

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

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

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

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

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

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

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

फाइबर कार्यान्वयन उदाहरण
ऑपरेटिंग सिस्टम समर्थन के बिना फाइबर को कार्यान्वित किया जा सकता है, हालांकि कुछ ऑपरेटिंग सिस्टम या पुस्तकालय उनके लिए स्पष्ट समर्थन प्रदान करते हैं।
 * Win32 एक फाइबर एपीआई की आपूर्ति करता है (Windows NT 3.51 SP3 और बाद में)
 * Boost_(C%2B%2B_libraries)|C++ बूस्ट लाइब्रेरी में फाइबर क्लास बूस्ट संस्करण के बाद से है 1.62
 * रूबी (प्रोग्रामिंग भाषा) में हरे धागे थे (संस्करण 1.9 से पहले)
 * नेटस्केप पोर्टेबल रनटाइम (एक उपयोगकर्ता-स्थान फाइबर कार्यान्वयन शामिल है)
 * Ribs2
 * PHP संस्करण 8.1 के बाद से

यह भी देखें

 * सेटकॉन्टेक्स्ट|सेटकॉन्टेक्स्ट/गेटकॉन्टेक्स्ट लाइब्रेरी रूटीन
 * हरे धागे
 * कॉल-साथ-वर्तमान-निरंतरता

बाहरी संबंध

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