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個程...