在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Linux/ 簡介
信號
創(chuàng)建目錄權限
示例程序
進程的定義
Hello World進程
創(chuàng)建進程
進程鎖
第四章 項目實例Run
Nohup命令
PID
前言
系統(tǒng)調(diào)用sendfile
進程參數(shù)
參考書籍
后記
進程狀態(tài)
本書概述
寫時復制(Copy On Write)
Docker簡介
第五章 注意事項
實現(xiàn)Run
孤兒進程概念
共享內(nèi)存
衍生(Spawn)新進程
PPID
第三章 進程進階
退出碼
簡介
進程文件
Thanks for reading!
項目學習
第一章 進程基礎
僵尸進程
系統(tǒng)調(diào)用
POSIX簡介
執(zhí)行(Exec)外部程序
文件描述符
進程名字
進程輸入與輸出
Cgroups
進程間通信
查看PID
死鎖概念
進程越多越好?
Run項目架構
  • 1.
復制(Fork)進程
第二章 Go編程實例
活鎖概念
守護(Daemon)進程
并發(fā)與并行
捕獲SIGKILL
Namespaces簡介

簡介

簡介

Epoll是poll的改進版,更加高效,能同時處理大量文件描述符,跟高并發(fā)有關,Nginx就是充分利用了epoll的特性。講這些沒用,我們先了解poll是什么。

Poll

Poll本質上是Linux系統(tǒng)調(diào)用,其接口為int poll(struct pollfd *fds,nfds_t nfds, int timeout),作用是監(jiān)控資源是否可用。

舉個例子,一個Web服務器建了多個socket連接,它需要知道里面哪些連接傳輸發(fā)了請求需要處理,功能與select系統(tǒng)調(diào)用類似,不過poll不會清空文件描述符集合,因此檢測大量socket時更加高效。

Epoll

我們重點看看epoll,它大幅提升了高并發(fā)服務器的資源使用率,相比poll而言哦。前面提到poll會輪詢整個文件描述符集合,而epoll可以做到只查詢被內(nèi)核IO事件喚醒的集合,當然它還提供邊沿觸發(fā)(Edge Triggered)等特性。

不知大家是否了解C10K問題,指的是服務器如何支持同時一萬個連接的問題。如果是一萬個連接就有至少一萬個文件描述符,poll的效率也隨文件描述符的更加而下降,epoll不存在這個問題是因為它僅關注活躍的socket。

實現(xiàn)

這是怎么做到的呢?簡單來說epoll是基于文件描述符的callback函數(shù)來實現(xiàn)的,只有發(fā)生IO時間的socket會調(diào)用callback函數(shù),然后加入epoll的Ready隊列。更多實現(xiàn)細節(jié)可以參考Linux源碼,

Mmap

無論是select、poll還是epoll,他們都要把文件描述符的消息送到用戶空間,這就存在內(nèi)核空間和用戶空間的內(nèi)存拷貝。其中epoll使用mmap來共享內(nèi)存,提高效率。

Mmap不是進程的概念,這里提一下是因為epoll使用了它,這是一種共享內(nèi)存的方法,而Go語言的設計宗旨是"不要通過共享來通信,通過通信來共享",所以我們也可以思考下進程的設計,是使用mmap還是Go提供的channel機制呢。

上一篇:查看PID下一篇:PPID