2011-03-14 15 views
9

मैं PHP 5 प्रमाणन परीक्षा के लिए अध्ययन कर रहा हूं। अभ्यास समारोह में इस समारोह का उल्लेख किया गया था।PHP स्ट्रीम में अवरुद्ध और गैर-अवरुद्ध मोड

समारोह stream_set_blocking():

सेट अवरुद्ध या एक धारा पर गैर अवरुद्ध मोड।

यह फ़ंक्शन किसी भी स्ट्रीम के लिए काम करता है जो गैर-अवरुद्ध मोड (वर्तमान में, नियमित फ़ाइलें और सॉकेट स्ट्रीम) का समर्थन करता है।

दोनों उच्च स्तरीय और निम्न-स्तरीय परिप्रेक्ष्य से, ब्लॉकिंग मोड और गैर-अवरुद्ध मोड धाराएं PHP में कैसे व्यवहार करती हैं? मैं एक सॉकेट स्ट्रीम और एक गैर सॉकेट स्ट्रीम क्या है? उदाहरण की सराहना की जाती है।

उत्तर

25

ब्लॉकिंग/गैर-अवरुद्ध मोड कहता है कि अगर फ़्रेड/फ़्राइट फ़ंक्शन तत्काल वापस आ जाएंगे। non-blocking mode में, वे किसी भी उपलब्ध डेटा पर वापस आ जाएंगे। यदि समारोह लागू होने पर कोई डेटा नहीं पढ़ा जा सकता है, तो कोई भी वापस नहीं किया जाएगा। इस तरह की धाराओं को एक लूप में लगाया जाता है।

blocking mode में, फ़ंक्शन हमेशा (और इसलिए अपने प्रोग्राम निष्पादन को अवरुद्ध कर देगा) प्रतीक्षा करें, जब तक कि यह पूर्ण पढ़ने के अनुरोध को पूरा न कर सके। यदि आप किसी नेटवर्क सॉकेट से 1 एमबी पढ़ने के लिए कहते हैं, तो फ़ंक्शन तब तक वापस नहीं आएगा जब तक इसे पास करने के लिए 1 एमबी प्राप्त नहीं हो जाता है।

मुझे लगता है कि विकिपीडिया यह काफी अच्छी तरह से शामिल किया गया है:
http://en.wikipedia.org/wiki/Berkeley_sockets#Blocking_vs._non-blocking_mode

यह ज्यादातर नेटवर्क फ़ाइल/धारा स्रोतों पर प्रभाव पड़ता है। स्थानीय फाइल सिस्टम के लिए ऑपरेटिंग सिस्टम हमेशा डेटा की वांछित लंबाई को पढ़ेगा। PHP में stream wrappers भी है, जो कि अपने विवेकाधिकार पर उस विकल्प को संभाल सकता है (कोई विश्वसनीय सामान्य नियम नहीं है)।

अधिक निम्न स्तर के विवरण के लिए, fnctl की manpages जाएँ (2) या (2) सॉकेट या
http://www.scottklement.com/rpg/socktut/nonblocking.html

+1

बहुत उपयोगी है, धन्यवाद! –

+0

भयानक, आप चट्टानों – Muhammad

संबंधित मुद्दे