早上复习了下这几个概念,做一个简单的总结。
主要参考了这篇链接:[聊聊同步、异步、阻塞与非阻塞](ps:这篇写的真心赞啊!大家可直接看这篇)
概述
同步异步主要是从消息通知的机制角度来说的,而阻塞与非阻塞关注的则是等待消息通知时的状态。
也就是说,同步的情况下,是由处理消息者自己去等待消息是否被触发,而异步的情况下是由触发机制来通知处理消息者。简言之:
同步:消息处理着主动等消息
异步:别人通知消息处理着。
(消息:事件完成,事件触发)举例:同步I/O,异步I/O
同步I/O自己去等I/O完成,在等的过程中,可以阻塞,可以不阻塞。但是如果不阻塞,因为还是要等,所以需要不断切换任务来“看”I/O是否完成,系统有开销。所以,同步非阻塞I/O效率最低。异步I/O,自己不等I/O完成,而是I/O完成之后,通知消息处理着,后者去处理。显然,异步非阻塞效率最高。
在上文中,同步异步关心的I/O是否完成(即I/O是否可读)消息调用着是怎么知道的,自己等,还是别人告诉你。阻塞非阻塞关心的是不管是自己等,还是别人告诉你。在你知道消息前,线程所处的状态。