前言
繼續(xù)更新“用 C 寫一個(gè) web 服務(wù)器”項(xiàng)目(上期鏈接:用C寫一個(gè)web服務(wù)器(一) 基礎(chǔ)功能),本次更新選擇了 I/O 模型的優(yōu)化,因?yàn)樗欠?wù)器的基礎(chǔ),這個(gè)先完成的話,后面的優(yōu)化就可以選擇各個(gè)模塊來進(jìn)行,不必進(jìn)行全局化的改動(dòng)了。
I/O模型
接觸過 socket 編程的同學(xué)應(yīng)該都知道一些 I/O 模型的概念,linux 中有阻塞 I/O、非阻塞 I/O、I/O 多路復(fù)用、信號(hào)驅(qū)動(dòng) I/O 和 異步 I/O 五種模型。
其他模型的具體概念這里不多介紹,只簡(jiǎn)單地提一下自己理解的 I/O 多路復(fù)用:簡(jiǎn)單的說就是由一個(gè)進(jìn)程來管理多個(gè) socket,即將多個(gè) socket 放入一個(gè)表中,在其中有 socket 可操作時(shí),通知進(jìn)程來處理, I/O 多路復(fù)用的實(shí)現(xiàn)方式有 select、poll 和 epoll。