非wait線程即時喚醒epoll_wait

問題情境

一般IO複用是使用 one loop per thread 的模型, 一般wait都是可讀事件,監聽可寫需實時添加,如果遇到wait線程在等待可讀事件,並一直阻塞下去, 卻有一個線程想添加監聽可寫事件,這時需要喚醒wait,並添加可寫事件。

解決方案

** 直接喚醒wait的方式就是可讀事件,那麼只需要給wait一個可讀事件即可。**

因此epoll需要多監聽一個套接字作爲喚醒wait的專用套接字,可以用pipe, 可以用其他的eventfd

以使用pipe爲例。

開啓一個pipe,將讀端的套接字加入監聽紅黑樹,那麼當需要喚醒使wait返回時,只需要想pipe寫端寫入數據即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章