痛苦的epoll 執行緒池實踐 2 相關模式的設定

2021-06-02 01:46:48 字數 695 閱讀 6841

參見 《

經驗實在太重要了:epoll的一些補充》

epoll模式分為et邊緣模式和 lt水平模式

io 阻塞模式分為 阻塞和非阻塞

1、et邊緣模式(listen socket fd)+非阻塞(listen socket fd)

可以使用同一執行緒的epoll,但是應注意如果是 listen socket fd可讀,應使用 while 重複 accept 多個連線

2、et邊緣模式(listen socket fd)+阻塞(listen socket fd)

由於 listen socket fd 是阻塞的,accept 和 epoll 最好放在兩個執行緒;否則因為listen socket fd 是 et邊緣模式,有一到多個連線過來,如

果此時讓該單執行緒while阻塞在  listen socket fd 的 accept上,程式將一直沒有響應,如果不用while,而僅僅accept 一次,則會使得該次epoll

事件中的後續連線無法 accept到

3、lt水平模式(listen socket fd)+非阻塞(listen socket fd)

可以使用同一執行緒epoll,不需要while重複accept多個連線

4、lt水平模式(listen socket fd)+阻塞(listen socket fd)

此模式非常類似經典select、poll,相當於乙個快速的poll

執行緒池的理解2

使用者提交任務 條件1.核心池已滿?是 2.佇列已滿?是 3.執行緒池已滿?是 按照策略執行不能處理的任務 否 否 否 執行緒建立執行緒執行任務 將任務儲存到阻塞佇列 建立執行緒執行任務 addworker 執行緒主要的步驟 需要獲取全域性鎖,影響效能 在execte 中建立乙個新的執行緒 步驟1 ...

自定義執行緒池的實踐

自定義執行緒池 public class userdefinedthread catch interruptedexception e system.out.println 執行緒 a 執行完畢 定義執行緒工廠 static class definethreadfactory implements ...

java執行緒池(2) 執行緒池新增任務的過程(原理)

上一期簡單的聊了一下執行緒池的建立。這一期我們就,稍微熟悉一下執行緒池執行任務的過程吧!執行緒池的工作原理是怎麼樣的呢?首先,我用圖來說明吧!這裡可以看到有乙個任務佇列,然後還有乙個工作的執行緒池。今天主要將的就是向任務佇列中新增任務的過程!對於執行緒池我們上一期是做了乙個稍微的解釋的。我們構建執行...