簡體   English   中英

嵌套 EPOLL FD

[英]Nested EPOLL FD

我在網上找到的關於嵌套 FD 行為的信息非常有限。

假設 EPOLL FD1 在 EPOLL FD2 和 FD3 之間共享。 那么如果 epoll FD1 得到一個事件會發生什么

  1. 如果在沒有 epoll_exclusive 標志的情況下添加它,它是否會同時向 FD2 和 Fd3 引發事件。
  2. 收到事件后,我是否需要在 FD1 上執行 epoll_wait 來清除事件。

嵌套epoll FD的用例是什么。

對於電平觸發的情況,它非常簡單:

  1. 是的,您可以結合 epoll(7) 聯機幫助頁中 Q&A 部分對 Q2 和 Q3 的回答:
    A2:如果兩個epoll實例添加同一個文件描述符,事件都會上報給兩個實例。
    A3:如果一個 epoll 文件描述符有事件等待,那么它將表明它是可讀的。
  2. 不,因為清除事件只與邊緣觸發的 epoll 相關。

對於邊緣觸發的情況,我們希望 1 的答案保持不變,因為無論嵌套如何,如果將同一個 FD 與EPOLLET添加到兩個 epoll 實例中,它們都會報告每個事件一次。

我不知道第二個問題的答案應該是什么,但沒關系。 在邊緣觸發模式下添加 epoll FD 時有一個錯誤,它們總是表現得像電平觸發一樣,FD2 和 FD3 將繼續顯示 FD1 是可讀的,只要它有待處理的事件。 你可以看到這個關於試圖修復它的線程,我認為它尚未在大陸進行: fs/epoll: fix the edge-triggered mode for nested epoll
哪個鏈接到這個GitHub 存儲庫,它測試了很多不同的場景,你可能會覺得有趣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM