gpt4 book ai didi

networking - 联网系统 - "blocking"和 "non-blocking"协议(protocol)有什么区别?

转载 作者:行者123 更新时间:2023-12-04 06:08:05 25 4
gpt4 key购买 nike

在计算机网络中——实际上在许多其他领域中——我听到很多关于“阻塞”、“非阻塞”、“同步”和“异步”的术语。我想知道是否有人可以用非常简单/简单的术语解释这些应该是什么意思?

最佳答案

“阻塞”调用“阻塞”调用它的程序,直到它完成。在下一条语句运行之前,您的程序必须等待它执行(无论如何)。大多数函数调用都是“阻塞的”,例如 set x to 4 + 4在计算 8 的值之前不会继续下一条语句并将其分配给 x .同样,阻塞或同步网络方法将阻止调用程序直到它完成。在诸如“向远程系统发送数据包”之类的情况下,这个时间可能以秒或更长的时间来衡量,而不是算术消耗的微秒(或更少)。

相反,“非阻塞”或异步方法通常会将其结果存放在某种“邮箱”或“队列”中,或者(更常见的是)在完成时回调您提供的函数。对于在等待相对较慢的网络进程完成时执行其他任何操作(例如,显示用户界面)的程序,这通常/通常更好。

当访问相对较快的本地服务时,例如本地磁盘 I/O、一台计算机上的进程间通信或将输出发送到本地显示器时,阻塞 I/O 有时是首选,因为它更容易编写。

阻塞网络 I/O 的示例:

set web-page to (the result of) get url "http://www.google.com/"
in web-page, find <title>...</title>,
assign this to google-title;
if not found,
present a warning, and
set google-title to "Google"
do something else…

相对:
get url "http://www.google.com/" and call back google-title-callback
do something else…

function google-title-callback, accepts web-page:
in web-page, find <title>...</title>,
assign this to google-title;
if not found,
present a warning, and
set google-title to "Google"

异步 I/O 也几乎总是在应用程序级别用于 GUI 编程。例如,基于终端(流)的程序可能同步等待用户输入,而 GUI 程序可能是异步的,允许您随机选择各种控件或执行其他需要它接受消息的操作(如调整窗口大小)通过回调方法或事件处理程序的不同时间,这或多或少相当于与上面的网络回调示例相同类型的事物。

关于networking - 联网系统 - "blocking"和 "non-blocking"协议(protocol)有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8362794/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com