这两个词经常一起出现,所以很容易被误当成同义词。其实它们回答的不是同一个问题:一个描述数据完成时由谁收尾,一个描述等待数据时线程会不会卡住。
非阻塞关注的是等不等
如果当前没有数据,调用马上返回,线程可以先去做别的事,这就是非阻塞。它解决的是等待阶段的线程占用问题。
同步关注的是谁来完成结果获取
同步的关键在于,数据准备好了以后,仍然要由当前调用方自己把结果取走并继续处理。它描述的是完成阶段的职责归属。
为什么它们会被混淆
因为在很多经典例子里,同步常和阻塞一起出现,异步常和非阻塞一起出现。但这是常见组合,不是定义本身。
一句话区分
非阻塞看线程等不等,同步看结果由谁收尾;两个维度相关,但不是一回事。
正文完




