关于同步,异步,阻塞,非阻塞

同步与异步

同步:发出一个调用,若没有得到结果,则调用不返回;若调用返回,那么一定得到结果了

异步:发出一个调用,立即返回,没有返回结果。当被调用者有结果了,再通过状态、通知来告诉调用者来获取结果

核心在消息通信机制

一个典型的例子,异步IO

将调用者视作主线程,通常情况下,主线程中会实现一个消息循环

消息循环的作用是读取消息-处理消息

读取的消息取自消息队列,所谓的消息队列,就是将当我们的操作(点击鼠标,键盘等)视作消息,多个消息组成的队列叫做消息队列。

这样,发出一个IO请求R1之后,从主线程这一边来看,就相当于消息队列里多了一个消息。

主线程读取R1之后,再创建一个线程T1来处理R1,但不等待处理结果,而是立即返回到主线程,继续处理请求R2,R3....

等T1处理R1完毕,再通知主线程获取处理结果

阻塞与非阻塞

阻塞:在被调用者返回结果之前,调用者挂起。调用者在得到结果之后再返回。

非阻塞:在被调用者返回结果之前,调用者不会被阻塞。

关注的是调用者在等待被调用者返回结果时的状态

注:以上叙述中,“结果”指的是被调用者返回的值,调用者,被调用者都可当作线程来理解。

 

posted @ 2017-12-31 16:08  geeklove  阅读(169)  评论(0)    收藏  举报