同步、异步、阻塞、非阻塞
网上看到也有很多讲解关于同步、异步、阻塞、非阻塞,但众说纷纭,也不太好理解,下面我尝试用简单的几句话来解释这几个概念,如果有误,欢迎指出。
同步、异步关注的是消息通信机制。阻塞、非阻塞关注的是等待消息时调用者的状态。
一、同步
A调用B,A必须等待B的结果返回才能干其它事。简单来说,同步就是必须一件事一件事做,等前一件做完了才能做下一件事。
如:B/S模式中的表单提交,具体过程是:客户端提交请求->等待服务器处理->处理完毕返回,这个过程中客户端(浏览器)不能做其他事。
二、异步
A调用B,A没有得到结果之前,就可以继续执行后续操作。当调用完成后,一般通过状态、通知和回调来通知调用者。
如:B/S模式中的ajax请求,具体过程是:客户端发出ajax请求->服务端处理->处理完毕执行客户端回调,在客户端(浏览器)发出请求后,仍然可以做其他的事
通知调用者的方式 | 说明 |
---|---|
状态 | 监听被调用者的状态(轮询),调用者需要每隔一定时间检查一次,效率会很低 |
通知 | 当被调用者执行完成后,发出通知告知调用者,无需消耗太多性能 |
回调 |