前段時間練習時重新寫了一下基於tcp/ip協議的簡易回射伺服器。
大致流程是:
1、建立套接字,繫結服務端ip和埠
2、將套接字設定為監聽狀態
3、提取
4、讀寫
5、關閉
期間遇到一些簡單和複雜的問題,一些感覺需要注意的問題,接一下會選擇行的記錄。
#include
#include
#include
#include
#include
#include
"wrap.h"
void
free_process
(int sig)
else}}
intmain
(int argc,
char
*ar**)
else
if(pid ==0)
//子程序
else
if(n ==0)
//對方關閉j
else}}
else
//父程序
}//關閉
return0;
}
通過寫著組**時,對於為什麼子程序要關閉監聽字元產生了疑問,後來才知道這是驚群現象(ps:感覺自己好菜)
驚群現象
簡單來說就是多程序(執行緒)監聽同乙個事件,導致當事件發生時,多程序被喚醒,但是最終卻只能有乙個程序(執行緒)獲得這個時間的「控制權」,對該事件進行處理,而其他程序(執行緒)獲取「控制權」失敗,只能重新進入休眠狀態,這種現象和效能浪費就叫做驚群效應。
驚群效應危害:
1、linux 核心對使用者程序(執行緒)頻繁地做無效的排程、上下文切換等使系統效能大打折扣。上下文切換(context switch)過高會導致早期版本中:linux對於該問題會報錯,因為乙個程序執行該事件後,其他程序就找不到該事件,會產生錯誤。cpu 像個搬運工,頻繁地在暫存器和執行佇列之間奔波,更多的時間花在了程序(執行緒)切換,而不是在真正工作的程序(執行緒)上面。直接的消耗包括cpu 暫存器要儲存和載入(例如程式計數器)、系統排程器的**需要執行。間接的消耗在於多核 cache 之間的共享資料。
linux 2.6 版本之後,通過引入乙個標記位 wq_flag_exclusive,解決掉了 accept 驚群效應。
基於UDP協議的簡單回射伺服器的實現
1.無連線 2.基於訊息的資料傳輸服務 3.不可靠 4.一般情況下udp更加高效 ssize t recvfrom int sockfd,void buff,size t nbytes,int flags,struct sockaddr from socklen t addrlen ssize t ...
TCP 回射伺服器
tcp reflect server client tcp回射伺服器。學習了 unp 的第五章前面的知識,自己把 敲出來了,加深了理解吧。簡單地說就是,client傳送給server一條訊息 一行文字 server再將同樣地訊息傳送回client。就像這樣 用到的函式和api包括 1 socket ...
Linux C 回射伺服器
回射伺服器就是服務端將客戶端的資料傳送回去。我實現的回射伺服器返回增加了時間。服務端 可以很容易看懂 cpp view plain copy include include include include include include include include include define ...