了解IO多路復(fù)用應(yīng)該對(duì)epoll和select不陌生吧。首先,select是有缺陷的,就是當(dāng)事件發(fā)生(調(diào)用select)的時(shí)候,都需要在用戶態(tài)和內(nèi)核態(tài)之間拷貝fd數(shù)組,要知道用戶態(tài)和內(nèi)核態(tài)之間進(jìn)行內(nèi)存的拷貝是非常昂貴的,如果有上萬級(jí)別的并發(fā)網(wǎng)絡(luò)需要處理的時(shí)候,服務(wù)器根本處理不來。這時(shí)候,Linux內(nèi)核的開發(fā)者應(yīng)該算是簡單又粗暴的增加了一個(gè)內(nèi)核調(diào)用,就是epoll了,有時(shí)候簡單粗暴的東西還是能提高效率的。先來看select接口:
C語言使用函數(shù)調(diào)用,我們再熟悉不過了,但是函數(shù)調(diào)用在內(nèi)存中究竟發(fā)生了什么真的清楚嗎?只有搞清楚內(nèi)存里的內(nèi)幕,才算完全搞懂函數(shù)的調(diào)用。
liqinglong1023