如何理解同步, 异步, 阻塞, 非阻塞?
貌似同步与阻塞有点相似, 异步与非阻塞感觉上也差不多…
同步和异步, 描述的是获取被调用者执行结果的方式.
-
同步, 就是调用者主动去获取被调用者的结果;
-
异步, 就是被调用者主动返回给调用者执行的结果(例如回调).
阻塞和非阻塞, 描述的是多线程之间处理临界资源时的方式
-
阻塞: 多线程面对临界区的共享资源, 只能有先来后到, 谁先获取到锁权限, 谁执行, 没有权限的线程阻塞等着.
-
非阻塞: 处理共享资源时, 采用一些手段, 让大家不用阻塞; 手段有什么呢? 自旋锁, 乐观锁, 分段锁, 共享锁, 或者ThreadLocal等
就是这么简单.
大家可能常常听说: 同步阻塞, 和异步非阻塞, 所以对概念之间有些混淆, 异步就是服务非阻塞的, 阻塞住了不同步又能如何.
好好斟酌一下, 体会更深.