網(wǎng)絡(luò)IO的本質(zhì)是socket的讀取,socket在linux系統(tǒng)被抽象為流,IO可以理解為對(duì)流的操作。剛才說(shuō)了,對(duì)于一次IO訪問(wèn)(以read舉例),數(shù)據(jù)會(huì)先被拷貝到操作系統(tǒng)內(nèi)核的緩沖區(qū)中,然后才會(huì)從操作系統(tǒng)內(nèi)核的緩沖區(qū)拷貝到應(yīng)用程序的地址空間。
所以說(shuō),當(dāng)一個(gè)read操作發(fā)生時(shí),它會(huì)經(jīng)歷兩個(gè)階段:
階段:等待數(shù)據(jù)準(zhǔn)備 (Waiting for the data to be ready)。 第二階段:將數(shù)據(jù)從內(nèi)核拷貝到進(jìn)程中 (Copying the data from the kernel to the process)。
對(duì)于socket流而言,
步:通常涉及等待網(wǎng)絡(luò)上的數(shù)據(jù)分組到達(dá),然后被復(fù)制到內(nèi)核的某個(gè)緩沖區(qū)。第二步:把數(shù)據(jù)從內(nèi)核緩沖區(qū)復(fù)制到應(yīng)用進(jìn)程緩沖區(qū)。
網(wǎng)絡(luò)應(yīng)用需要處理的無(wú)非就是兩大類問(wèn)題,網(wǎng)絡(luò)IO,數(shù)據(jù)計(jì)算。相對(duì)于后者,網(wǎng)絡(luò)IO的延遲,給應(yīng)用帶來(lái)的性能瓶頸大于后者。
網(wǎng)絡(luò)IO的模型大致有如下幾種:
同步阻塞IO(bloking IO) 同步非阻塞IO(non-blocking IO) 多路復(fù)用IO(multiplexing IO) 信號(hào)驅(qū)動(dòng)式IO(signal-driven IO) 異步IO(asynchronous IO)
PS: 這塊略復(fù)雜,在后面的提供了問(wèn)答,所以用了最簡(jiǎn)單的舉例結(jié)合Linux IO圖例幫你快速理解。