阻塞和非阻塞读取有什么区别?

use*_*514 3 c++ multithreading nonblocking blocking

将等待/无等待指示符的概念添加到上述问题中作为TCP/IP或UDP环境中的ReadMessage函数的参数.

第三方功能描述指出:

此函数用于从队列中读取消息,该队列由先前的registerforinput调用定义.输入等待/无等待指示符将确定此函数是否将阻止指定的队列,等待数据放在队列中.如果指定了nowait选项且没有可用数据,则会将NULL指针返回给调用者.当可用数据时,此函数将返回指向从队列读取的数据的指针.

函数阻塞或非阻塞是什么意思?

Mat*_*nen 8

阻止意味着您的代码(在该线程中)的执行将在调用期间停止.实质上,在阻塞操作完成之前,函数调用不会返回.

阻塞读取将等待,直到有可用数据(或超时,如果有的话,到期),然后从函数调用返回.非阻塞读取将(或至少应该)立即返回,但如果当前没有数据,则可能不会返回任何数据.

  • @user553514:“阻塞”意味着这个执行线程阻塞。当这个线程阻塞时,其他线程仍然可以被调度。 (3认同)

Nim*_*Nim 5

一个类比,如果你允许我 - 对不起,下午很晚了,我心情很好,如果它被否决了 - 嗯......

你想进一个时髦的夜总会,但保镖告诉你,除非有人出来,否则你不能进去。在这种情况下,您实际上被“阻止”了。当有人出来时,您可以自由进入 - 或者出现一些错误情况,例如“那些是培训师吗?” 你的夜晚并没有真正开始,直到你进入,你的享受被“阻止”了。

在“非阻塞”情况下,您将告诉保镖您的电话号码,他会在有空位时给您回电。因此,现在您可以在等待某人出来的同时做其他事情,您可以在其他地方开始您的夜晚,并在被召唤时返回并继续那里......

对不起,如果那没有帮助...

  • 对于“阻塞”场景,如果发现俱乐部已满,保镖不会让您离开;你别无选择,只能等待。对于“非阻塞”场景,您可以询问保镖是否有空位,并且可以自由离开,希望有空位时稍后回来,但成功入场需要在有空位时出现. “异步 I/O”场景是您将号码留给保镖的场景。 (4认同)