日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

网络编程模型综述 之 多线程模型

發(fā)布時間:2023/12/10 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 网络编程模型综述 之 多线程模型 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

每個連接對應(yīng)一個線程

???????? 一個網(wǎng)絡(luò)socket對應(yīng)一個處理線程,socket采用阻塞I/O模型;

???????? 這種模型是小程序和java常用的策略,對于交互式的長連接應(yīng)用也是常見的選擇(比如BBS),也常用來做內(nèi)部服務(wù)器交互的模型。這種策略很難滿足高性能程序的需求,好處是實現(xiàn)極其簡單,容易嵌入復雜的交互邏輯。Apacheftpd等都是這種工作模式。

線程池

線程池一般有兩種模式:Half-Sync/Half-Async模式和Leader/Followers模式

半同步、半異步模式(Half-Sync/Half-Async

???????? 這種模式有三部分組成:異步事件接收層、事件同步隊列、同步事件處理層;

???????? 其中,異步事件接收層為一個線程,同步事件處理層可以有多個線程;

???????? 它的工作流程很清晰:

1.?????? 異步線程負責檢查網(wǎng)絡(luò)的異步事件;

2.?????? 發(fā)生網(wǎng)絡(luò)事件時,異步線程把網(wǎng)絡(luò)事件放入事件隊列;

3.?????? 同步線程從隊列中獲取網(wǎng)絡(luò)事件,并執(zhí)行同步的讀或?qū)懖僮?#xff1b;

這個過程需要注意的是,不要引起兩個同步線程同時接收或發(fā)送一個socket的情況。

領(lǐng)導者、追隨者模式(Leader/Followers

???????? 這種模式與Half-Sync/Half-Async完全不同,沒有事件隊列,沒有固定的事件接收者,每個線程都是事件接收者,也是處理者;

???????? Leader/Followers的流程:

1.?????? 準備若干個線程用來處理大量的事件;

2.?????? 有一個線程作為Leader,等待事件的發(fā)生;其他的線程作為Follower,僅僅是睡眠;

3.?????? 有事件需要處理時,如果Leader能很快處理掉,Leader會再次進入等待狀態(tài);

4.?????? 如果Leader不能馬上處理完,Leader則從Followers中指定一個新的Leader,自己去處理事件,不再當Leader;

5.?????? 被喚醒的Follower作為新的Leader等待事件的發(fā)生;

6.?????? 處理事件的線程處理完畢以后,就會成為Follower的一員,直到被喚醒成為Leader;

IOCP就是典型的L/F的工作模式,當線程1GetQueuedCompletionStatus這里返回后,如果線程1的處理過程沒有超過某個時間段,而是很快就返回,之后繼續(xù)GetQueuedCompletionStatus,那OS會讓新到的數(shù)據(jù)從線程1GetQueuedCompletionStatus獲取,這樣就減少了線程的CONTEXT切換代碼;反之,如果線程1處理時間比較長,那么新到的數(shù)據(jù)將會由線程2GetQueuedCompletionStatus獲得;

多進程模型

???????? 一個客戶端對應(yīng)一個進程來處理,也是一種歷史悠久的網(wǎng)絡(luò)模型,linux的典型例子就是inetd服務(wù)。這種方式用來處理間斷性內(nèi)部數(shù)據(jù)處理時,比其常駐內(nèi)存的stand-alone模式更節(jié)省系統(tǒng)資源。

總結(jié)

以上是生活随笔為你收集整理的网络编程模型综述 之 多线程模型的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。