Linux高并發(fā)服務器開發(fā)要點梳理

區(qū)分select/poll/epoll

  • 本質上都是同步阻塞I/O,在I/O事件就緒后自己負責將數(shù)據(jù)從內核拷貝到用戶空間;
  • select和poll比較類似,在內核空間和用戶空間之間需要每一次拷貝傳遞所有文件描述符;
  • epoll是Linux2.6內核提出的對select和poll的優(yōu)化,將用戶的文件描述符存放在內核的一個事件表中,這樣在系統(tǒng)內核空間與用戶空間只需要拷貝一次;
  • 表面上看epoll的性能最好,但在連接數(shù)少且都十分活躍的情況下,select和poll的性能可能比epoll好,畢竟epoll的通知機制需要很多函數(shù)回調;
  • select低效是因為它每次都需要輪詢,但這是可以通過設計該刪的。

C10K/C10M問題

  • 由于硬件資源耗盡導致網(wǎng)絡服務器無法提供同時服務超過10,000連接或客戶端的能力;
  • 并不是因為TCP/IP的Socket Port端口最大值(65535)引起的,兩者可以說毫無關系。端口可以復用,而且可以使用多個(虛擬)網(wǎng)卡;
  • 操作系統(tǒng)最大可打開文件數(shù):單進程,以及全系統(tǒng),兩個地方都可以修改以增大限制;
  • 系統(tǒng)跟蹤的最大TCP連接數(shù);此限制值應盡量小,以節(jié)省對內核內存的占用,例如設置為net.ipv4.ip_conntrack_max = 10240
  • 內存只有:一個socket在內核可能占用2~4M空間,一個線程可能占用1M左右空間。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容