在网络编程中,常见到:同步(Sync), 异步(Async), 阻塞(Block), 非阻塞(Unblock) 四种调用方式。
—————————————————————————————————————————————————
同步/异步主要针对C端:
同步:
所谓同步,就是在c端发起一个同能调用时,在没有得到结果之前,该调用就不返回。也就是必须一件一件事做,等前一件做完了才能做下一件事。
例如普通B/S模式(同步):提交请求 -> 等待服务器处理 -> 处理完毕返回 这个期间客户浏览器不能干任何事
异步:
异步的概念与同步相对。当C端一个异步请求调用发出后,调用者不能立刻返回结果。实际上这个调用的部件是在完成后,通过状态,通知和回调来通知调用者。
例如 ajax 请求:通过事件触发 -> 服务器处理(这时浏览器仍然可以做其他的事情)-> 处理完毕
——————————————————————————————————————————————————
阻塞/非阻塞主要针对S端:
阻塞:
阻塞调用是指调用结果返回之前,当前线程会被挂起(线程进入非可执行状态,在这个状态下,cpu不会给线程分配时间片,即线程暂停运行)。函数只有在得到结果后才能返回。
非阻塞:
非阻塞于阻塞概念相对应,指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回。
同步IO与异步IO的区别在于:数据访问的时候进程是否阻塞。
阻塞IO与非阻塞IO的区别在于:应用程序的调用是否立刻返回。