同步、异步、阻塞与非阻塞的理解与使用场景

首先来一张图片大致了解一下这四个概念:
同步、异步、阻塞与非阻塞的理解与使用场景_第1张图片

然后再来听一听鄙人的一些个人见解:

先解释最基础的概念, 之后用生活化的例子完成认知。

首先是blocking 和 non-blocking这两个概念。
这两个概念实质上是和IO没有关系的,他们是在说,比如读数据, 如果没有数据我该怎么办。
也就是说, 他是在IO不存在的时候, 在语义上才是有效, 如果你要读的数据始终是存在的, 那么你还会考虑阻塞与非阻塞的问题吗?

那你应该考虑什么? 同步还是异步IO, 到底什么是同步或者异步呢?
英文synchronous是由syn 和chronous构成的, syn是在一起的意思,而chronous是时间的意思. 也就是说在一个时间点上在一起, 那么是谁和谁在意一起呢?
其中一个是IO可以肯定, 另外一个就是执行IO的发起者, 通常也就是进程. 简单说来这个IO是由进程执行的.。
那么异步IO呢, asynchronous是a + synchronous,其中a表否定, 我们知道在IO进行的过程中我们的进程是始终存在的, 也就是说IO和进程共享着相同的时间进度, 但是却不在一起。
也就是说, IO不是由我们的进程完成的,而是别的进程完成的, 那到底是谁呢,没错,是内核线程.。
那么我们就知道只有linux上的aio是符合异步IO的标准,而多路复用,如epoll返回时我们和IO是在一起的,我们要调用read之类的完成他.。

下面用一个生活化的例子,说明下linux下的IO。比如你要买<演员的自我修养>这本书,还要买件衬衫,你会怎么买?
你要先去书店,如果店家没有货,如果告诉你一个小时后货会补齐,这你可以等,但是时间稍微长点你就不愿意等了。也就是阻塞和非阻塞。
之后你要去服装店,也是同样,假如都没货,你又等不下去,怎么办?你又不能一会儿去这家问下书什么时候到货? 一会儿又跑去服装店询问。这太累人了,最好的方式是,你去告诉店家我要什么,到货了给我打个电话,我再过来。这就是IO多路复用。
可是还有更高明的方法,没错就是京东自营了,我网上下订单,第二天直接送到家了。京东,为什么成功?这下你知道了吧。。。用户省心啊!(举个栗子便于理解,纯属个人喜好,不喜勿喷~)对应异步IO。

你可能感兴趣的:(linux,python)