如何理解同步异步和阻塞非阻塞

同步异步,阻塞非阻塞两组概念是面试中经常遇到的概念,也是程序员们非常容易混淆的概念,下面我们来看下两者的概念和区别

阻塞和非阻塞针对的程序执行(关注CPU)时在等待结果(返回值,消息的时候)对应的操作

1,阻塞指的是在等待调用结果的时候,当前线程会一直等待结果返回才继续向下执行

2,非阻塞指的是等待调用结果的时候,当前线程不会一直等待,而是继续向下执行。

同步和异步针对的是调用者(关注程序之间的通信即网络)使用的消息通信机制

3,同步就是调用发出之后,调用者选择对消息的处理机制,收到完成的消息才返回

4,异步就是调用发出之后,直接返回,等待消息通知再回来继续执行

基于以上,就产生了一下几种I/O模型

1,同步模型之阻塞式IO, 简单易见,程序调用外部,CPU是阻塞的,同时也要等待消息的返回程序才会,这种模型适用于计算型的应用。

2,同步模型值非阻塞IO,程序调用外部时,CPU可以不用等待消息返回,可以继续执行其他操作,然后不断地发送消息确认操作是否完成,知道消息返回或者出错。

3,IO多路复用,程序调用外部时,会有额外的监视调用是否就绪,常见的有select, poll, epoll的方式,通过这种方式,同一个进程可以同时处理多个连接。

4,信号驱动式I/O 这种不常见,首先我们允许Socket进行信号驱动IO,并安装一个信号处理函数,进程继续运行并不阻塞。当数据准备好时,进程会收到一个SIGIO信号,可以在信号处理函数中调用I/O操作函数处理数据。

5,异步非阻塞IO 对于调用时,进程会继续向下执行,不关心是否返回,而是等待内核完成之后通知完成。

参考https://www.jianshu.com/p/486b0965c296

加qq群获取源码:994625692(可以聊天聊地的那种)

猜你喜欢

转载自blog.csdn.net/JiuJieGuDuKe/article/details/89471131