科学知识:同步、异步、阻塞和非阻塞

科学知识:同步、异步、阻塞和非阻塞
简单指出:

阻碍是不允许回来,总是在等待直到它完成。

非阻塞是你先做。我会看看有没有别的东西在我发现东西卡住之前立即报告领导。

让我们以最常用的发送和接收功能

例如,你调用Send函数发送一个字节发送给系统内所做的工作是数据传输复制)的TCP / IP协议栈的输出缓冲区,这并不意味着发送数据已经成功执行成功,如果TCP / IP协议栈没有足够的可用缓冲区来保存你的数据复制…这次展示的阻塞和非阻塞的区别:对socket的发送函数阻塞模式将在系统有足够的空间来将数据发送回复制过去就缓冲回来,和非阻塞套接字发送wsaewoulddblock告诉打电话的人会立刻说:发送操作封锁!!!你想处理……

出于同样的原因,recv函数的内部工作机制的功能是通知它说:在接收的TCP / IP协议栈缓冲区高,你的数据。对于阻塞模式套接字,如果TCP/IP协议栈的接收缓冲区没有通知结果,则不会返回系统资源。阻止套接字函数的方式非将立即返回,然后告诉你wsaewoulddblock ---:没有数据,坐在后面一看

延伸:

网络编程中,我们经常看到四种类型同步,异步的,阻塞的和非阻塞的,这些都不是很好的理解,下面是我对这些术语的理解。

1。同步

所谓的同步是函数调用时发出,呼叫不到的结果是没有得到回报。根据这一定义,函数中的绝大多数都是同步调用(如仙,IsDigit,等等),但总的来说,我们说话时,同步和异步,我们指的要求其他地区的合作还是需要一定的时间来完成任务。最常见的例子是SendMessage。这个函数将消息发送到一个窗口,而不在其他已完成消息返回。当一方完成处理,函数返回一些值返回的消息处理函数的来电。

2。异步

异步的概念和同步。当一个异步过程调用发送,对方不能立即得到结果。当实际处理这个调用部分完成后,来访者的状态,通知,通知和回调。以casycsocket类为例(注意,CSocket是从CAsyncSocket,但功能已从异步到同步)。当一个客户端发送连接请求通过调用connect函数,调用者线程可以运行下来。当连接真正建立,插座的底部层发送一个消息通知该对象。这里所说的是,执行部件和调用者返回结果有三种:状态、通知和回调哪一个可以用来实现组件的实现,除非执行部分提供了多种选择,否则不受对方控制。如果执行部分由政府通知,调用者需要每次在一定的时间检查。效率很低,如果使用通知,效率很高,因为执行部分几乎不需要额外的操作,至于回调函数,通知和通知之间没有多大差别。

三.梗阻

阻塞调用意味着当前线程挂起之前调用的结果返回,函数只会在得到回报。有人可能会把阻塞同步调用调用,事实上他们是不同的。同步要求,很多时候仍然是激活当前线程,但目前的功能在逻辑上是不例如,我们叫回来接收功能的CSocket,如果缓冲区中的任何数据,该函数将等待数据返回。在这一点上,当前线程将继续处理各种消息。如果主窗口和调用函数在同一线程的主界面应该被刷新,除非你把它在一个特殊的界面操作功能。另一个函数,recv,socket接收的数据是一个阻塞调用的一个例子。插座在阻塞模式工作时,如果调用函数时没有数据,当前线程将被挂起直到有数据。

4。非阻塞

非阻塞和阻塞的概念对应于函数不阻塞当前线程并立即返回之前不能立即得到结果的函数。

对象的阻塞模式和阻塞函数调用

对象是否处于阻塞模式和函数是否是阻塞调用具有很强的相关性,但它不是一对一的对应。阻塞对象可以有非阻塞调用。我们可以通过某个API轮询状态,在正确的时间调用阻塞函数时停止阻塞。对于非阻塞对象,调用特殊函数也可以进入阻塞调用。
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部