併發程式設計6

2022-08-29 13:03:20 字數 841 閱讀 6899

io模型

模型就是套路,是解決某個固定問題的方式方法

io模型是解決io問題的方式

io指的是輸入輸出,輸入輸裝置的速度對比cpu而言是非常慢的,比如recv,input等都屬於io操作

io操作最大的問題就是會阻塞程式的執行

io模型要解決的也僅僅是網路io操作

io模型有以下幾個:

1 阻塞io

socket模組預設就是阻塞的

產生的問題:同一時間只能服務乙個客戶端

方法一:多執行緒

優點:如果併發量不高,小路是較高的

因為每個客戶端都由單獨執行緒來處理

弊端:不能無限的開啟執行緒,執行緒也需要占用資源

方法二:多程序

優點:可以多個cpu並行處理

弊端:占用資源非常大,一旦客戶端稍微多一點執行效率立刻變慢

執行緒池,程序池:

優點:保證了伺服器正常穩定的執行,還幫你負責建立和銷毀執行緒以及任務分配

弊端:一旦併發量超過最大執行緒數量,就只能等前面的執行完畢

協程:基於單執行緒併發

弊端:不能利用多核優勢

2 非阻塞io

非阻塞io 即遇到io操作也不導致程式阻塞,會繼續執行意味著即使遇到io操作cpu執行權也不會被剝奪程式效率就變高了

3 io多路復用

多路復用也是要用單執行緒來處理客戶端併發,與其他模型相比多出了select這個角色

程式不再直接問系統要資料,而是發起乙個select呼叫,select會阻塞直到其中某個socket準備就緒,此時應用程式再發起系統呼叫來獲取資料,由於select已經幫我們確認了某個socket一定是就緒了,所以後續的recv,send等操作可以立即完成,不會阻塞

併發程式設計6 執行器

如果想開發伺服器應用,應該有大的吞吐量和快速的響應。這樣就要求伺服器段有清晰的任務邊界和任務執行策略。現在看乙個伺服器應用 public static void main string args throws ioexception 順序執行的,造成資源利用率低,吞吐量或響應速度都很低。來乙個多執行...

併發程式設計(6) forkjoin

forkjion裡面的兩個重要的概念 分而治之,什麼是分而治之?乙個大的事情平均分成幾個相同小的事情,如果沒有達到最小的要求,就繼續分,一直分到達到的要求。工作密取,workstealing 如果分而治之的執行緒很多,就會形成執行緒的佇列,這裡面就會有完成的快和慢的不同執行緒。快的執行緒執行完成以後...

併發程式設計(6)執行緒間通訊

1.基本概念 wait 將同步執行緒處於凍結狀態,釋放執行權,同時將執行緒物件儲存到執行緒池 notify 喚醒執行緒池中某個等待執行緒 notifyall 喚醒執行緒池中所有執行緒 2.注意 1 這些方法都需要定義在同步中 2 這些方法必須要標示所屬的鎖 3 為什麼這三個方法要被定義在object...