博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
阻塞与非阻塞,同步与异步
阅读量:6445 次
发布时间:2019-06-23

本文共 804 字,大约阅读时间需要 2 分钟。

  在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式:

同步:
      所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。也就是必须一件一件事做,等前一件做完了才能做下一件事。

 

例如普通B/S模式(同步):提交请求->等待服务器处理->处理完毕返回 这个期间客户端浏览器不能干任何事

异步:

      异步的概念和同步相对。当一个异步过程调用发出后,调用者不能立刻得到结果。实际处理这个调用的部件在完成后,通过状态、通知和回调来通知调用者。

     例如 ajax请求(异步): 请求通过事件触发->服务器处理(这是浏览器仍然可以作其他事情)->处理完毕

阻塞

     阻塞调用是指调用结果返回之前,当前线程会被挂起(线程进入非可执行状态,在这个状态下,cpu不会给线程分配时间片,即线程暂停运行)。函数只有在得到结果之后才会返回。

     有人也许会把阻塞调用和同步调用等同起来,实际上他是不同的。对于同步调用来说,很多时候当前线程还是激活的,只是从逻辑上当前函数没有返回而已。 例如,我们在socket中调用recv函数,如果缓冲区中没有数据,这个函数就会一直等待,直到有数据才返回。而此时,当前线程还会继续处理各种各样的消息。

非阻塞

      非阻塞和阻塞的概念相对应,指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回。
对象的阻塞模式和阻塞函数调用
对象是否处于阻塞模式和函数是不是阻塞调用有很强的相关性,但是并不是一一对应的。阻塞对象上可以有非阻塞的调用方式,我们可以通过一定的API去轮询状 态,在适当的时候调用阻塞函数,就可以避免阻塞。而对于非阻塞对象,调用特殊的函数也可以进入阻塞调用。函数select就是这样的一个例子。

转载于:https://www.cnblogs.com/wangsicongde/p/7576886.html

你可能感兴趣的文章
单元测试 逃不开的Done 与约定
查看>>
解决parseSdkContent failed java.lang.NullPointerException错误
查看>>
正确的 zip 压缩与解压代码
查看>>
经典SQL语句大全
查看>>
关于测试中哪些信息需要放到jira上面
查看>>
《JQuery技术内幕》读书笔记——自调用匿名函数剖析
查看>>
解决statusStrip控件上的项目不能靠右对齐的问题
查看>>
时间服务器/时间同步配置
查看>>
创建与删除索引
查看>>
am335x 内核频率 ddr3频率 电压调整
查看>>
<runtime> 的 <assemblyIdentity> 元素和<bindingRedirect> 元素
查看>>
【LeetCode】76. Minimum Window Substring
查看>>
查找任意数目参数的最大值
查看>>
UVa 1586 - Molar Mass
查看>>
Android蓝牙设备名修改
查看>>
Oracle PL/SQL随堂笔记总结
查看>>
编码原则:最小化使用控制结构(条件和循环)续:告别 break 和 continue
查看>>
Serialize a Binary Tree or a General Tree
查看>>
3.跟我学solr---使用solrj加入索引
查看>>
属性“dataProvider”有多个初始值设定项。(注意:“dataProvider”是“mx.charts.BarChart”的默认属性)。...
查看>>