一、相关概念
1.同步异步
同步异步指的是在客户端;
同步:客户端提出了一个请求以后,在回应之前只能等待
异步:客户端提出一个请求后,还可以继续提其他请求
2.阻塞非阻塞
阻非阻塞指的是服务器端;
阻塞:服务器接受一个请求后,在返回结果之前不能接受 其他请求;
非阻塞:服务器接受一个请求后,尽管没有返回结果,还是可以继续接受其他请求。
二、重点详解
1.同步异步
关注的是消息通信机制
同步(主动): 在发出一个调用时,在没有得到结果之前,该调用就不返回,调用者主动等待调用的结果。
比如:你打电话问书店老板有没有《红楼梦》,他说他要查一下才知道,这个时候你不挂电话,直接等他查到结果。
异步(被动) :在调用发出后,这个调用直接返回,没有返回结果,被调用者通过状态、通知来通知调用者。
比如:你打电话问书店老板有没有《红楼梦》,他说他要查一下才知道,这个时候你挂了电话,等他查到结果后再让他打电话回来告诉你。
2.阻塞非阻塞
关注的是程序在等待调用结果(消息,返回值)时的状态
阻塞调用(等) :是指调用结果返回之前,当前线程会被挂起。调用线程只有在得到结果之后才会返回。
意思是,在老板查到有没有那本书之前,你就只在这等着他的结果。
非阻塞调用(不等) :指在不能立刻得到结果之前,该调用不会阻塞当前线程。
意思是,在老板在查的时候,你可以去干点别的事情,偶尔确认一下老板有没有返回结果就行。
三、联系
异步程序背后的最主要的特点就在于:
当出现一个任务像在同步程序一样出现阻塞时,会让其它可以执行的任务继续执行,而不会像同步程序中那样全部阻塞掉。