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