linux下面的poll與select的區別:poll與select本質上是一樣的,不同之處有如下:
1. 每個進程使用的select有最大連接數限制,只能有FD_SETSIZE個,而poll沒有這樣的限制(採用鏈表存儲);
弊端:select和poll都需要有一個比較大的結構來存儲所有的socket連接,每次有一個可用(可讀可寫或出錯)的socket過來的時候,都需要遍歷一遍結構,隨着連接的增加,遍歷的長度會越來越長,如此很浪費
使用非阻塞I/O的應用程序也經常使用poll、selec和epoll系統調用。poll、selec和epoll的功能,本質上是一樣的:都允許進程決定是否可以對一個和多個打開文件做非阻塞操作的讀取和寫入。這些調用也會阻塞進程,直到給定的文件描述符集合中的任何一個可讀取或寫入。因此,他們常常用於那些要使用多個輸入和輸出流而又不會阻塞阻於其中任何一個流的應用程序程序中。同一功能之所以要多個獨立函數提供,是因爲其中兩個幾乎是同時由兩個不同的unix團體分別實現的:selec在BSD unix中引入,而poll由System V引入。epoll系統調用,它用於將poll函數的擴展到能個處理數千個文件描述符。