जब एक एफडी पढ़ने के लिए या के लिए तैयार बारे में हो जाता है, तो आप जरूरी नहीं कि पढ़ने के लिए तुरंत चाहते हो सकता है (या लिखना) सभी डेटा।
लेवल-ट्रिगर एपोल आपको तब तक परेशान रखेगा जब तक कि एफडी तैयार रहता है, जबकि अगली बार जब तक आप EAGAIN
प्राप्त नहीं करते हैं तब तक एज-ट्रिगर आपको परेशान नहीं करेगा (इसलिए यह कोड के आसपास अधिक जटिल है, लेकिन हो सकता है आपको जो करना है उसके आधार पर अधिक कुशल)।
कहें कि आप संसाधन से एक एफडी में लिख रहे हैं। यदि आप उस एफडी के लिए अपनी रुचि पंजीकृत करते हैं जो स्तर-ट्रिगर के रूप में तैयार हो रहा है, तो आपको लगातार अधिसूचना मिल जाएगी कि एफडी अभी भी लेखन के लिए तैयार है। यदि संसाधन अभी तक उपलब्ध नहीं है, तो यह जागने का अपशिष्ट है, क्योंकि आप वैसे भी लिख नहीं सकते हैं।
आप इसे जोड़ने के लिए के रूप में बढ़त ट्रिगर बजाय, आप सूचना है कि एफडी एक बार तैयार लिख रहा था, तो जब अन्य संसाधन तैयार आप आप कर सकते हैं जितना लिखना हो जाता है मिलता था तो। फिर यदि write(2)
EAGAIN
लौटाता है, तो आप लिखना बंद कर देते हैं और अगली अधिसूचना का इंतजार करते हैं।
वही पढ़ने के लिए लागू होता है, क्योंकि आप जो कुछ भी करना चाहते हैं, उसके लिए तैयार होने से पहले आप सभी डेटा को उपयोगकर्ता-स्थान में खींचना नहीं चाहते हैं (इस प्रकार इसे बफर करना आदि)। किनारे से ट्रिगर किए गए एपोल के साथ आपको बताया जाता है कि यह पढ़ने के लिए तैयार है, और फिर उसे याद कर सकते हैं और "जैसे और कब" वास्तविक पढ़ने को कर सकते हैं।
स्रोत
2012-02-06 15:48:07
क्या यह एज-ट्रिगर व्यवहार दौड़ की स्थिति के विरुद्ध सुरक्षित है, उदा। यदि 'ईडैन' के साथ 'रीड' विफल होने के बाद डेटा उपलब्ध हो जाता है लेकिन 'एपोल' से पहले कहा जाता है? –
निश्चित रूप से। एफपी पहले ही तैयार है और आपको अभी तक अधिसूचित नहीं किया गया है, तो 'एपोल' तुरंत वापस आ जाता है। –
ईटी मल्टीकोर मशीन पर एक बहुप्रचारित सर्वर के साथ भी विशेष रूप से अच्छा है। आप एक थ्रेड प्रति कोर चला सकते हैं और उनमें से सभी एक ही epfd पर epoll_wait को कॉल कर सकते हैं। जब डेटा एफडी पर आता है, तो इसे संभालने के लिए बिल्कुल एक धागा जागृत किया जाएगा। –