富途證券 8.14

2020-08-14 21:08:15

計算機網路->數據庫->操作系統->C++

1.select和epoll區別

select、poll、epoll三者的區別:
1、select,poll實現需要自己不斷輪詢所有fd集合,直到裝置就緒,期間可能要睡眠和喚醒多次交替。而epoll其實也需要呼叫epoll_wait不斷輪詢就緒鏈表,期間也可能多次睡眠和喚醒交替,但是它是裝置就緒時,呼叫回撥函數,把就緒fd放入就緒鏈表中,並喚醒在epoll_wait中進入睡眠的進程。雖然都要睡眠和交替,但是select和poll在「醒着」的時候要遍歷整個fd集合,而epoll在「醒着」的時候只要判斷一下就緒鏈表是否爲空就行了,這節省了大量的CPU時間。這就是回撥機制 機製帶來的效能提升。

2、select,poll每次呼叫都要把fd集合從使用者態往內核態拷貝一次,並且要把current往裝置等待佇列中掛一次,而epoll只要一次拷貝,而且把current往等待佇列上掛也只掛一次(在epoll_wait的開始,注意這裏的等待佇列並不是裝置等待佇列,只是一個epoll內部定義的等待佇列)。這也能節省不少的開銷。
在这里插入图片描述

https://www.cnblogs.com/aspirant/p/9166944.html


2.進程與執行緒區別

執行緒和進程各自有什麼區別和優劣呢