[原文地址:https://blog.ti-node.com/blog...]php
要想更好了解socket編程,有一個不可繞過的環節就是IO.
在Linux中,一切皆文件.實際上要文件幹啥?不就是讀寫麼?因此,這句話本質就是"IO纔是王道".用php的fopen打開文件關閉文件讀讀寫寫,這叫本地文件IO.在socket編程中,本質就是網絡IO.
因此,在開始進一步的socket編程前,咱們必須先從概念上認識好IO.
若是到這裏你還對IO沒啥概念,那麼我就經過幾個詞來給你一個大概的印象:同步,異步,阻塞,非阻塞,甚至是同步阻塞,同步非阻塞,異步阻塞,異步非阻塞.是否是暈了?截至到目前爲止,你能夠簡單地認爲只要搞明白這幾個名詞的含義以及區別,就算弄明白IO了,至少了能夠繼續往下看了.
先機械記憶一波兒:IO分爲兩大種,同步和異步.node
那麼如何理解區別這幾個概念呢?尤爲是同步和阻塞,異步和非阻塞,看起來就是同樣的.
我先舉個例子結合本身的理解來講明一下:編程
若是你仔細品過上面案例中的每個字,你就能慢慢體會到之因此異步和非阻塞,同步和阻塞容易混淆,僅僅是由於兩者的表現形式稍微有點兒類似而已.
阻塞和非阻塞關注的是:在等饅頭的過程當中,你在幹啥.
同步和異步關注的是:等饅頭這件事,你是一直等到"饅頭出爐"的結果,仍是當即跑路等阿梅告訴你的"饅頭出爐".重點的是你是如何得知"饅頭出爐"的.
因此現實世界中,最傻的人才會採用異步阻塞的IO方式去寫程序.其他三種方式,更多的人都會選擇同步阻塞或者異步非阻塞.同步非阻塞最大的問題在於,你須要不斷在各個任務中忙碌着,致使你的大腦混亂,很是累.微信
[原文地址:https://blog.ti-node.com/blog...]網絡