GO语言学习系列:同步/异步/阻塞/非阻塞

来源:互联网 发布:淘宝兼职模特招聘 编辑:程序博客网 时间:2024/06/08 04:28

在消息通信中,经常会把同步/异步/阻塞/非阻塞等概念混淆,在此查找资料,并进行总结。

同步/异步

有A、B两个线程进行通信

同步:A向B发送消息后,B在处理消息的过程中,线程A一直处于主动等待B的消息的状态(不执行其他操作--阻塞,定期发送查询信息--非阻塞),B处理完消息后,A主动得到B的结果,此时A和B之间处于同步模式;

异步:A向B发送消息后,A不主动等待B的消息(继续执行其他操作--非阻塞,不执行--阻塞),B处理消息后,将处理结果返回给A,

此时A和B之间处于异步模式;

注意:同步/异步是指线程之间,与线程等待消息时的状态有关。

阻塞:A向B发送消息后,A处于等待状态不进行其他操作,此时A为阻塞调用;

非阻塞:A向B发送消息后,A在处于等待的同时继续执行其他操作,

此时A处于非阻塞调用;

注意:阻塞/非阻塞是指同一个线程的状态,与线程等待消息时的状态有关。

具体说明:

同步阻塞I/O

A向B发送消息后,A一直处于等待状态不执行其他操作(A处于阻塞状态),

直到B处理完消息后返回结果(A、B间属于同步),A收到B的结果后继续执行。

同步非阻塞I/O

A向B发送消息后,A处于主动等待B消息的状态,此时A定期向B查向处理结果(A、B

之间为同步),同时A可以处理其他操作(A处于非阻塞状态),知道B处理完消息返回结果,

A收到结果后继续执行。

异步阻塞I/O

A向B发送消息后,A不执行其他的操作(A处于阻塞状态),B处理完消息后主动发送结果到A

(A、B之间为异步状态),A收到处理结果后继续执行。

异步非阻塞I/O

A向B发送消息后,A继续执行其他操作(A处于非阻塞状态),B处理完消息后主动发送

结果到A(A、B之间为异步状态),A收到处理结果后继续执行。

个人理解,异步的处理类似于回调或消息链表?同步的处理方式为定时器?不太确定,求大神解释。


原创粉丝点击