这些概念如果没有事先看过,在面试时可能表述不出来。关于这几个概念网上一直都没有准确的定论,面试官的理解也未必正确,所以被问到这个问题,自求多福吧。
关于IO模型,推荐文章:https
同步
同步指的是在一次同步方法调用开始时,调用者必须主动等待被调用对象返回才能进行下一步操作(但不一定会阻塞,可能是忙等)。
异步
异步指的是在一次方法调用开始,调用者不必等待被调用者返回才能去处理别的事情,而是被调用者主动或者其他方通知调用者被调用对象返回了。
同步和异步根本区别
同步是需要主动等待消息通知,而异步则是被动接收消息通知,通过回调、通知、状态等方式来被动获取消息。
阻塞
表示事情在没有得到返回前,调用者不能去处理其他事情,直到调用返回,才能处理其他事情。
我们所说的 “阻塞”是指进程在发起了一个系统调用(System Call) 后, 由于该系统调用的操作不能立即完成,需要等待资源可用或者条件满足,于是内核将进程挂起为等待(waiting)状态
, 以确保它不会被调度执行, 占用 CPU 资源。
阻塞当前进程(线程)会被挂起(线程进入非可执行状态,在这个状态下,cpu不会给线程分配时间片,即线程暂停运行)。
非阻塞
表示调用方不用等待调用返回才能处理其他事情。通常也是指