so true

          心懷未來,開創(chuàng)未來!
          隨筆 - 160, 文章 - 0, 評論 - 40, 引用 - 0
          數(shù)據(jù)加載中……

          epoll簡單學(xué)習(xí)

          epoll的EPOLLIN和EPOLLOU為什么不能同時(shí)關(guān)聯(lián)         http://laokaddk.blog.51cto.com/368606/791945
          epoll使用總結(jié)                                  http://laokaddk.blog.51cto.com/368606/617497
          epoll學(xué)習(xí):思考一種高性能的服務(wù)器處理框架           http://laokaddk.blog.51cto.com/368606/607231
          epoll學(xué)習(xí)筆記                                  http://laokaddk.blog.51cto.com/368606/607017
          簡單學(xué)習(xí)了一下epoll,之前也用過,這次又看了看,收獲如下:
          兩種實(shí)現(xiàn)模式(在http://laokaddk.blog.51cto.com/368606/791945中都有提到):同一個(gè)線程 和 不同線程;
          順便了解了一下驚群現(xiàn)象,如果用accept阻塞的方式就不存在驚群現(xiàn)象了,在不同線程中通過epoll_wait來出發(fā)accept行為的nginx的解決方法是通過進(jìn)程里原子的修改寄存器a來做到進(jìn)程間互斥的。
          在不同線程模式下:listenfd需設(shè)置為非阻塞,注冊EPOLLIN就可以了,觸發(fā)時(shí)調(diào)用accept,有沒有連接都會立刻返回;
          在同一個(gè)線程模式下:listenfd為阻塞模式,不注冊epoll,阻塞while調(diào)用accept即可;
          ET觸發(fā)只支持非阻塞模式,這里針對的fd是accept接收到的然后epoll_add了的那些fds,原因是:因?yàn)镋T觸發(fā)需要處理函數(shù)一直處理完所有in/out數(shù)據(jù),比如read數(shù)據(jù),如果read到的字節(jié)數(shù)小于預(yù)先準(zhǔn)備讀入的字節(jié)數(shù),那么就可以認(rèn)為讀完了;如果是非阻塞模式,那么read會一直阻塞在那里。
          epollfd不需要設(shè)置阻塞、非阻塞。
          一般都用LT觸發(fā),不論哪種實(shí)現(xiàn)模式,EPOLLIN和EPOLLOUT都不同時(shí)設(shè)定,都是不斷切換來做的。
          客戶端close掉socket時(shí),會喚醒服務(wù)端epoll_wait;
          對于epoll_wait而言,針對一個(gè)fd只存在喚醒與被喚醒,至于是EPOLLIN還是EPOLLOUT,取決于你當(dāng)初epoll_add時(shí)的設(shè)定,因此如果你epoll_add時(shí)設(shè)定了EPOLLIN|EPOLLOUT,那么當(dāng)EPOLLIN發(fā)生時(shí)(內(nèi)核里當(dāng)然是可以區(qū)分EPOLLIN和EPOLLOUT的),你收到的fd上的事件依然是EPOLLIN|EPOLLOUT。

          http://my.oschina.net/costaxu/blog/127394
          http://blog.csdn.net/guomsh/article/details/8484222
          http://blog.csdn.net/guomsh/article/details/8478209
          http://blog.csdn.net/ctthuangcheng/article/details/8596818
          http://blog.yunn.io/archives/114/

          posted on 2013-07-04 17:36 so true 閱讀(514) 評論(0)  編輯  收藏 所屬分類: C&C++Linux

          主站蜘蛛池模板: 芷江| 揭东县| 湾仔区| 武穴市| 翁源县| 化德县| 大化| 汽车| 孙吴县| 秭归县| 青铜峡市| 农安县| 阜宁县| 镇康县| 阿勒泰市| 荆州市| 星子县| 松原市| 横山县| 兴文县| 白山市| 观塘区| 枣庄市| 台中市| 安乡县| 卓资县| 会东县| 宁国市| 新兴县| 彭水| 营口市| 双流县| 连南| 徐水县| 赣州市| 南安市| 睢宁县| 泰宁县| 漳州市| 绥化市| 车致|