摘要:原文地址要想更好了解編程,有一個(gè)不可繞過(guò)的環(huán)節(jié)就是在中,一切皆文件實(shí)際上要文件干啥不就是讀寫(xiě)么所以,這句話本質(zhì)就是才是王道用的打開(kāi)文件關(guān)閉文件讀讀寫(xiě)寫(xiě),這叫本地文件在編程中,本質(zhì)就是網(wǎng)絡(luò)所以,在開(kāi)始進(jìn)一步的編程前,我們必須先從概念上認(rèn)識(shí)好
[原文地址:https://blog.ti-node.com/blog...]
要想更好了解socket編程,有一個(gè)不可繞過(guò)的環(huán)節(jié)就是IO.
在Linux中,一切皆文件.實(shí)際上要文件干啥?不就是讀寫(xiě)么?所以,這句話本質(zhì)就是"IO才是王道".用php的fopen打開(kāi)文件關(guān)閉文件讀讀寫(xiě)寫(xiě),這叫本地文件IO.在socket編程中,本質(zhì)就是網(wǎng)絡(luò)IO.
所以,在開(kāi)始進(jìn)一步的socket編程前,我們必須先從概念上認(rèn)識(shí)好IO.
如果到這里你還對(duì)IO沒(méi)啥概念,那么我就通過(guò)幾個(gè)詞來(lái)給你一個(gè)大概的印象:同步,異步,阻塞,非阻塞,甚至是同步阻塞,同步非阻塞,異步阻塞,異步非阻塞.是不是暈了?截至到目前為止,你可以簡(jiǎn)單地認(rèn)為只要搞明白這幾個(gè)名詞的含義以及區(qū)別,就算弄明白IO了,至少了可以繼續(xù)往下看了.
先機(jī)械記憶一波兒:IO分為兩大種,同步和異步.
阻塞IO
非阻塞IO
IO多路復(fù)用(包括select,poll,epoll三種)
信號(hào)驅(qū)動(dòng)IO
那么如何理解區(qū)別這幾個(gè)概念呢?尤其是同步和阻塞,異步和非阻塞,看起來(lái)就是一樣的.
我先舉個(gè)例子結(jié)合自己的理解來(lái)說(shuō)明一下:
你去甜在心饅頭店買太極饅頭,阿梅說(shuō):"暫時(shí)沒(méi),正在蒸呢,你自己看著點(diǎn)兒?。ⅲ谑悄憔驼驹谂赃呏坏瑞z頭.此時(shí)的你,是阻塞的,是同步的.阻塞表現(xiàn)在你除了等饅頭,別的什么都不做了.同步表現(xiàn)在等饅頭的過(guò)程中,阿梅不提供通知服務(wù),你不得不自己要等到"饅頭出爐"的消息.
你去甜在心饅頭店買太極饅頭,阿梅說(shuō):"暫時(shí)沒(méi),正在蒸呢,你自己看著點(diǎn)兒!".于是你就站在旁邊發(fā)微信,然后問(wèn)一句:"好了沒(méi)?",然后發(fā)QQ,然后再問(wèn)一句:"好了沒(méi)?".此時(shí)的你,是非阻塞的,是同步的.非阻塞表現(xiàn)在你除了等饅頭,自己還干干別的時(shí)不時(shí)會(huì)主動(dòng)問(wèn)問(wèn)饅頭好沒(méi)好.同步表現(xiàn)在等饅頭的過(guò)程中,阿梅不提供通知服務(wù),你不得不自己要等到"饅頭出爐"的消息.
你去甜在心饅頭店買太極饅頭,阿梅說(shuō):"暫時(shí)沒(méi),正在蒸呢,蒸好了我打電話告訴你?。ⅲ阋廊徽驹谂赃呏坏瑞z頭,此時(shí)的你,是阻塞的,是異步的.阻塞表現(xiàn)在你除了等饅頭,別的什么都不做了.異步表現(xiàn)在等饅頭的過(guò)程中,阿梅提供電話通知"饅頭出爐"的消息,你只需要等阿梅的電話.
你去甜在心饅頭店買太極饅頭,阿梅說(shuō):"暫時(shí)沒(méi),正在蒸呢,蒸好了我打電話告訴你?。ⅲ谑悄憔妥吡耍ベI了雙新球鞋,看了看武館,總之,從此不再過(guò)問(wèn)饅頭的事情,一心只等阿梅電話.此時(shí)的你,是非阻塞的,是異步的.非阻塞表現(xiàn)在你除了等饅頭,自己還干干別的時(shí)不時(shí)會(huì)主動(dòng)問(wèn)問(wèn)饅頭好沒(méi)好.異步表現(xiàn)在等饅頭的過(guò)程中,阿梅提供電話通知"饅頭出爐"的消息,你只需要等阿梅的電話.
如果你仔細(xì)品過(guò)上面案例中的每一個(gè)字,你就能慢慢體會(huì)到之所以異步和非阻塞,同步和阻塞容易混淆,僅僅是因?yàn)槎叩谋憩F(xiàn)形式稍微有點(diǎn)兒相似而已.
阻塞和非阻塞關(guān)注的是:在等饅頭的過(guò)程中,你在干啥.
同步和異步關(guān)注的是:等饅頭這件事,你是一直等到"饅頭出爐"的結(jié)果,還是立即跑路等阿梅告訴你的"饅頭出爐".重點(diǎn)的是你是如何得知"饅頭出爐"的.
所以現(xiàn)實(shí)世界中,最傻的人才會(huì)采用異步阻塞的IO方式去寫(xiě)程序.其余三種方式,更多的人都會(huì)選擇同步阻塞或者異步非阻塞.同步非阻塞最大的問(wèn)題在于,你需要不斷在各個(gè)任務(wù)中忙碌著,導(dǎo)致你的大腦混亂,非常累.
[原文地址:https://blog.ti-node.com/blog...]
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/29361.html
摘要:原文前面可以說(shuō)是弄了一系列的和多進(jìn)程的一大坨內(nèi)容,知識(shí)淺顯代碼粗暴風(fēng)格簡(jiǎn)陋,總的說(shuō)來(lái),還是差了一些細(xì)節(jié)。今天,就一些漏掉的細(xì)節(jié)補(bǔ)充一下。最后,我補(bǔ)充一句是同步的,而不是異步。 原文:https://t.ti-node.com/thread/... 前面可以說(shuō)是弄了一系列的php socket和多進(jìn)程的一大坨內(nèi)容,知識(shí)淺顯、代碼粗暴、風(fēng)格簡(jiǎn)陋,總的說(shuō)來(lái),還是差了一些細(xì)節(jié)。今天,就一些漏...
摘要:原文地址在初探先從一個(gè)簡(jiǎn)單的服務(wù)器開(kāi)始中依次講解了三個(gè)逐漸進(jìn)步的服務(wù)器只能服務(wù)于一個(gè)客戶端的服務(wù)器利用可以服務(wù)于多個(gè)客戶端的額服務(wù)器利用預(yù)派生進(jìn)程服務(wù)于多個(gè)客戶端的服務(wù)器最后一種服務(wù)器的進(jìn)程模型基本上的大概原理其實(shí)跟我們常用的是非常 [原文地址:https://blog.ti-node.com/blog...] 在<PHP socket初探 --- 先從一個(gè)簡(jiǎn)單的socket服務(wù)器開(kāi)始...
摘要:因?yàn)樽舆M(jìn)程一定不會(huì)是組長(zhǎng)進(jìn)程,所以子進(jìn)程可以調(diào)用。主進(jìn)程退出子進(jìn)程繼續(xù)執(zhí)行啦啦啦,啦啦啦,啦啦啦,已經(jīng)變成啦,開(kāi)心一般服務(wù)器軟件都有寫(xiě)配置項(xiàng),比如以模式運(yùn)行還是以模式運(yùn)行。 [原文地址:https://blog.ti-node.com/blog...] 其實(shí)前面是談過(guò)一次daemon進(jìn)程的,但是并涉及過(guò)多原理,但是并不影響使用。今天打算說(shuō)說(shuō)關(guān)于daemon進(jìn)程更多的二三事,本質(zhì)上說(shuō),如...
摘要:原文地址正如標(biāo)題所言,顫顫抖抖開(kāi)篇。于是只能是你自己,把單子上的個(gè)快遞逐次和收到的對(duì)比一遍,然后對(duì)比完畢后再把這個(gè)單子給了阿梅,然后阿梅繼續(xù)等。剃光頭前的阿梅,就是,不敢正眼看老板娘一眼。剃光頭后的阿梅,就是,可徒手接魔鬼隊(duì)的死亡之球。 [原文地址:https://blog.ti-node.com/blog...] 正如標(biāo)題所言,顫顫抖抖開(kāi)篇epoll。顫顫抖抖的原因大概也就是以前幾乎...
閱讀 2027·2019-08-30 15:52
閱讀 2990·2019-08-29 16:09
閱讀 1333·2019-08-28 18:30
閱讀 2464·2019-08-26 12:24
閱讀 1109·2019-08-26 12:12
閱讀 2284·2019-08-26 10:45
閱讀 580·2019-08-23 17:52
閱讀 845·2019-08-23 16:03