同步与异步:
同步:发出一个调用,若没有得到结果,则调用不返回;若调用返回,那么一定得到结果了
异步:发出一个调用,立即返回,没有返回结果。当被调用者有结果了,再通过状态、通知来告诉调用者来获取结果
核心在消息通信机制。
一个典型的例子,异步IO:
将调用者视作主线程,通常情况下,主线程中会实现一个消息循环。
消息循环的作用是读取消息-处理消息。
读取的消息取自消息队列,所谓的消息队列,就是将当我们的操作(点击鼠标,键盘等)视作消息,多个消息组成的队列叫做消息队列。
这样,发出一个IO请求R1之后,从主线程这一边来看,就相当于消息队列里多了一个消息。
主线程读取R1之后,再创建一个线程T1来处理R1,但不等待处理结果,而是立即返回到主线程,继续处理请求R2,R3....
等T1处理R1完毕,再通知主线程获取处理结果。
阻塞与非阻塞:
阻塞:在被调用者返回结果之前,调用者挂起。调用者在得到结果之后再返回。
非阻塞:在被调用者返回结果之前,调用者不会被阻塞。
关注的是调用者在等待被调用者返回结果时的状态。
注:以上叙述中,“结果”指的是被调用者返回的值,调用者,被调用者都可当作线程来理解。