【原文地址:https://blog.ti-node.com/blog...】想要更好的理解socket编程,有一个绕不开的环节就是IO。在Linux中,一切皆文件。你到底想要这个文件做什么?不就是读书写字吗?所以,这句话的本质就是“IO为王”。使用php的fopen打开文件和关闭文件进行读、写、写。这称为本地文件IO。在socket编程中,本质就是网络IO。因此,在开始进一步的socket编程之前,我们首先要从概念上理解IO。如果你到这里还没有IO的概念,那我就通过几个词给你一个大概的印象:同步,异步,阻塞,非阻塞,甚至同步阻塞,同步非阻塞,异步阻塞,异步非阻塞.你头晕?至此,你可以简单的认为,只要理解了这些术语的含义和区别,你就可以理解IO,至少你可以继续往下看。先机械地记一下:IO分为同步和异步两种。SynchronousIO:blockingIOnon-blockingIOIOmultiplexing(包括select,poll,epoll三种)signal-drivenIOasynchronousIO那么如何理解这几个概念的区别呢?特别是,同步和阻塞,异步和非阻塞,看起来是一样的。我举个例子以我自己的理解来说明一下:你去天在新馒头店买太极馒头,阿妹说:“还没呢,正在蒸呢,你自己看吧!”。所以你就站在旁边等馒头。这时候你就被阻塞同步了。堵体现在你什么都不做,就是等馒头。同时,在等待包子的过程中,阿妹不提供通知服务,您必须等待“包子出炉”的消息。你去天在新馒头店买太极馒头,阿妹说:“还没呢,正在蒸呢,你自己看吧!”。所以你就站在一边发微信,然后问:“你还好吗?”,然后发QQ,再问:“你还好吗?”。这时候,你是非阻塞和同步的。不堵就是除了等馒头,其他事情自己做,时不时主动问问馒头好不好。同时,在等待包子的过程中,阿妹不提供通知服务,您必须等待“包子出炉”的消息。你去天在新馒头店买太极馒头,阿妹说:“还没呢,正在蒸呢,蒸好了我叫你!”。可你还是站在一旁等馒头。这个时候你是阻塞的,异步的。堵体现在你什么都不做,就是等馒头。异步表现在等待包子的过程中,阿梅提供电话通知“包子出炉”的消息,你只需要等阿梅的电话即可。你去天在新馒头店买太极馒头,阿妹说:“还没呢,正在蒸呢,蒸好了我叫你!”。所以你去,去买拿起一双新运动鞋,又看了看武馆,总之以后不问包子的事,只等阿梅的电话。这时候,你就是非阻塞和异步的。不堵就是除了等馒头,其他事情自己做,时不时主动问问馒头好不好。异步表现在等待包子的过程中,阿梅提供电话通知“包子出炉”的消息,你只需要等阿梅的电话即可。如果仔细品味上面案例中的每一个词,你就会慢慢体会到,异步和非阻塞、同步和阻塞之所以容易混淆,只是因为这两个表达方式略有相似。阻塞和非阻塞重点:等包子的时候你在干什么?同步异步重点:等馒头,你是等到“馒头出炉”的结果,还是立马逃跑,等阿妹告诉你的“馒头出炉”.关键是你是怎么知道“馒头出炉了”的。所以在现实世界中,最笨的人都会使用异步阻塞IO的方式来写程序。对于剩下的三种方式,更多人会选择同步阻塞或者异步非阻塞。同步非阻塞最大的问题就是需要一直忙于各种任务,导致大脑混乱,非常疲劳。【原文地址:https://blog.ti-node.com/blog...】
