操作系統(tǒng)相關(guān)

kill -9 和 kill -10 的區(qū)別

看這篇文章:https://www.cnblogs.com/liuhouhou/p/5400540.html
總結(jié)來說 kill pid 默認(rèn) 是kill -15 pid
kill -10 是用戶自定義的殺死進(jìn)程的signal信號
kill -15 不一定殺死進(jìn)程,可能會被阻塞

select poll epoll

int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);

int poll(struct pollfd *fds, nfds_t nfds, int timeout);

當(dāng)有I/O發(fā)生時,并不知道是哪幾個,需要每個都輪詢,適合于解決同時大量IO的情況(尤其網(wǎng)絡(luò)服務(wù)器),poll和select的實現(xiàn)基本上是一致的,只是傳遞參數(shù)有所不同。
工作流程:
1、用戶態(tài)創(chuàng)建了網(wǎng)絡(luò) IO 連接,假設(shè)一個 socket 連接就是一個 fd 文件描述符,那么將 fd 添加到 fd_set 集合中
2、將 fd_set 集合從用戶態(tài) copy 到內(nèi)核態(tài)
3、遍歷這個 fd_set 集合,找出所有已經(jīng)就緒的 fd,執(zhí)行對應(yīng) fd 的相關(guān)操作
4、將內(nèi)核態(tài)的 fd_set 集合拷貝到用戶態(tài)

缺點:包含大量文件描述符的數(shù)組被整體復(fù)制于用戶態(tài)和內(nèi)核的地址空間之間,而且不論這些文件描述符是否就緒,每次都會輪詢所有描述符的狀態(tài),使得他們的開銷隨著文件描述符數(shù)量的增加而線性增大

epoll 看這篇文章
https://www.cnblogs.com/zengzy/p/5118336.html
總結(jié)來說 流程是create->ctl->wait
create 創(chuàng)建紅黑樹和就緒鏈表
ctl 用于用戶告知內(nèi)核自己關(guān)心哪個描述符(fd)的什么事件(event),插入紅黑樹(專門用于管理用戶關(guān)心的事件集合),注冊該fd的回調(diào),可讀寫的時候放入就緒鏈表
wait 監(jiān)控就緒鏈表,設(shè)備的某個資源可能被多個進(jìn)程等待,當(dāng)設(shè)備資源準(zhǔn)備好后,設(shè)備會喚醒阻塞在這個資源上的所有進(jìn)程,當(dāng)前調(diào)用epoll_wait的進(jìn)程未必能搶占這個資源,所以需要再調(diào)用檢查一次資源是否可用,返回用戶態(tài)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容