在所有編程語言中,函數(shù)的作用都是相似的
秀峰網(wǎng)站建設(shè)公司成都創(chuàng)新互聯(lián),秀峰網(wǎng)站設(shè)計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗。已為秀峰數(shù)千家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)公司要多少錢,請找那個售后服務(wù)好的秀峰做網(wǎng)站的公司定做!
在開發(fā)程序的時候,某一段代碼需要執(zhí)行很多次,為了提高編寫的效率以及代碼的復(fù)用,需要把這一段代碼封裝成一個模塊,這就是函數(shù)
C10k是一個在1999年被提出來的技術(shù)挑戰(zhàn),如何在一顆1GHz CPU,2G內(nèi)存,1gbps網(wǎng)絡(luò)環(huán)境下,讓單臺服務(wù)器同時為1萬個客戶端提供FTP服務(wù)
阻塞式I/O(使用最多)、非阻塞式I/O、I/O復(fù)用、信號驅(qū)動式I/O(幾乎不使用)、異步I/O(POSIX的aio_系列函數(shù))
select、poll、epoll都是IO多路復(fù)用的機制。I/O多路復(fù)用就是通過一種機制,一個進程可以監(jiān)聽多個描述符,一旦,某個描述符就緒(一般是讀就緒或者寫就緒),能夠通知程序進行相應(yīng)的讀寫操作。但select、poll、epoll本質(zhì)上都是同步I/O,因為他們都需要在讀寫時間就緒后負責(zé)進行讀寫,也就是說讀寫過程是阻塞的,而異步I/O無需自己負責(zé)進行讀寫,異步I/O的實現(xiàn)會負責(zé)把數(shù)據(jù)從內(nèi)核拷貝到用戶空間
(1)select
select函數(shù)監(jiān)視的文件描述符分3類,分別是writefds、readfds、exceptfds。調(diào)用select函數(shù)會阻塞,直到有描述符就緒(有數(shù)據(jù)可讀、可寫或者有except),或者超時函數(shù)返回。當select函數(shù)返回后可以通過遍歷fdset來找到就緒的描述符。
select目前幾乎在所有的平臺上支持,其良好的跨平臺支持也是它的一個優(yōu)點。select的一個缺點在于單個進程能夠監(jiān)視的文件描述符的數(shù)量存在最大限制,在Linux上一般為1024,可以通過修改宏定義甚至重新編譯內(nèi)核的方式提升這一限制,但是這樣也會降低效率。
(2)poll
不同于select使用三個位圖來表示三個fdset的方式,poll使用一個pollfd的指針實現(xiàn)。
pollfd結(jié)構(gòu)包含了要監(jiān)視的event和發(fā)生的event,不再使用select"參數(shù)-值"傳遞的方式。同時pollfd并沒有最大數(shù)量限制(但是數(shù)量過大后性能也會下降)。和select函數(shù)一樣,poll返回后,需要輪詢pollfd來獲取就緒的描述符。
從上面看,select和poll都需要在返回后通過遍歷文件描述符來獲取已經(jīng)就緒的socket。事實上同時連接的大量客戶端在同一時刻可能只有很少的處于就緒的狀態(tài),因此隨著監(jiān)視的描述符數(shù)量的增長,其效率也會線性下降
(3)epoll
epoll是在2.6內(nèi)核中提出的,是之前的select和poll的增強版本。相對于select和poll來說,epoll更加領(lǐng)靈活,沒有描述符限制。epoll使用一個文件描述符管理多個描述符,將用戶關(guān)系的文件描述符的事件存放到內(nèi)核的一個事件表中,這樣在用戶空間和內(nèi)核空間的copy只需一次。
python中函數(shù)的作用不包括增加代碼量。根據(jù)查詢相關(guān)資料信息,python中函數(shù)的作用有復(fù)用代碼、提高效率、減少代碼量等相關(guān)作用。
就是說一段代碼/函數(shù)你能用多次,就像南孚一樣,用在不同的場合中