同步、异步、阻塞、非阻塞的思考
2018第一篇博客,坚持下去。
好久没有写博客,应该坚持下去这个好习惯。 以前对同步、异步、阻塞、非阻塞知道是什么,但是从来没有深入思考他们对区别是什么。但是最近在了解bio、nio、aio(本文对io不进行讲述)的时候,感觉对这几个概念对理解还是满模糊对,所以又进行思考了一下,但是不确定是对还是不对,但是还是记录下来,等各位同学来帮忙指正一下吧。
我的感觉同步和异步这两个的概念指的是交互(泛指)的过程,说到交互肯定指的是两个小伙伴的。而阻塞和非阻塞的这个概念更向是仅仅对一个小伙伴的状态进行描述。
约定:请求者=A, 被请求者=B
1. 同步:同步故名思议同时进行,当A向B请求数据的时候,B可能需要准备数据的时候比较长,所以不立马返回数据,而这个时候A就一直在那里等待数据,当B数据准备完返回给A,A继续运行,这样的一个过程叫作同步。
2. 异步:异步指的是在交互的过程中,A向B请求数据,B准备数据的时间比较长,这个时候可能B单独开个线程或者进程为A准备数据,但是B会立马返回告诉A:”我正在准备数据,当我准备完的时候,会告诉你的,你可以先去忙其他的了”。这个时候A可以去做其他事情,当B准备完成数据之后,会通知A,这个交互的过程为异步。
3. 阻塞:阻塞指的是一方的状态,如果B在准备数据的过程中,A什么也不做,就是一直的在查询B是否准备完成了数据,那么A的这个状态就可以认为是阻塞在这里。
4. 非阻塞:非阻塞指的是当B在准备数据的时候,A不管B是否准备完了数据,A继续做它自己的事情去了,那么称A为非阻塞的。
以上内容是最近对这四个概念的理解,以前对非阻塞和异步的概念应该是有混淆的地方,现在的理解更加清晰了,有什么不对的地方,欢迎来踩点。慢慢积累、慢慢梳理更上一层楼。