併發Socket程式設計

2021-06-17 18:56:58 字數 2290 閱讀 2843

1. 非阻塞併發模型

直接將socket設定為非阻塞, 輪詢處理連線和接收。

缺點: 極大消耗cpu資源,不適合實際應用。

2. 訊號驅動模型

當socket檔案描述符準備就緒後 核心會給程序傳送乙個 sigio 或 sigpoll訊號,signal(sigio, fun);

實際中 並不只有套接字有輸入時才會發出這些訊號, 實際情況中並不能用。

3. 超時併發模型

a: 通過套接字選項設定超時

通過套接字選項so_sndtimeo 和 so_rcvtimeo設定讀寫超時,但是只能設定讀寫超時,不能設定connect 和 accept 等連線超時,並且有的系統不支援。

b: 通過訊號sigalrm 設定超時

#include static int ntimeout = 0;		

void ontimeout(int nsignal)

int main(int argc, char *argv)

c: 通過訊號sigalrm 與 跳轉設定超時

#include #include  static int ntimeout = 0;		

jmp_buf env;

void ontimeout(int nsignal)

int main(int argc, char *argv)

if (nsock != -1) close(nsock);

return 0;

}

4. 多路復用併發模型

5. 多程序併發模型

a: 不固定程序數的併發模型

比如父程序只執行函式accept等待並完成客戶端連線申請,子程序執行函式recv等待客戶端的資訊傳送。

缺陷: 客戶端無限申請,伺服器比爆。

b: 固定程序數的併發模型

伺服器父程序在建立監聽套接字(listen)後fork子程序, 由子程序等待客戶端connect並 完成與客戶端的通訊交換等工作,父程序之後的功能只是維持子程序的數目不變。

}else if( nchild == 0 ) //子程序

}return 0;}/*

int main()

*/

Socket程式設計之併發模型

所謂併發模型,就是當伺服器端accept乙個新的連線請求後,便開乙個新執行緒,處理與客戶端的連線。併發模型簡單易用,適用於客戶端的併發連線請求不多的應用中,但併發請求過多便不適用。示例 如下 完整示例 可參看 迴圈接受客戶端連線請求,請求到達到,開新執行緒與客戶端互動 while 1 socketi...

socket程式設計select實現併發處理

伺服器客戶端均已修改 伺服器 include include include include include include 使用signal函式 include 使用wait函式 include include include include define err exit m do while ...

協程實現socket併發程式設計

在python中多執行緒其實是被弱化了,因為由於gil的原因,同一時間只有乙個執行緒能訪問cpu,即使你的cpu是多核的在python中因為多執行緒被弱化了,所以協程顯的重要,能夠在乙個執行緒中提高cpu的利用率,乙個執行緒中開啟500個協程,4核cpu開啟20個執行緒效率不錯,4核cpu開啟5個程...