术语“阻止”是什么意思?

术语“阻止”是什么意思?

计算机科学中的术语“block”是什么意思?我见过它在很多场合被使用,但从来没理解它的意思。比如阻塞 I/O?谷歌搜索似乎对我没什么帮助。

答案1

阻塞 I/O 意味着程序本质上会询问:“获取这些数据,我会等到它准备好为止”。这与非阻塞 I/O 形成对比。有两种情况:“获取这些数据,我要去做其他事情。当数据准备好时打断我。”和“获取这些数据,我要去做其他事情。我稍后会询问您是否已准备好。”

这很重要,因为如果程序在等待数据时阻塞,它就无法执行诸如响应鼠标点击或重新绘制屏幕之类的操作。当您在任务管理器中看到标记为“无响应”的程序时,就是这种情况。

答案2

总之,这意味着该进程挂起(等待)直到 I/O 完成。 这篇维基百科文章简要介绍一下,重点介绍非阻塞 I/O:

(阻塞 I/O 将会)在通信过程中阻止程序的进程,使系统资源处于闲置状态。当程序进行许多 I/O 操作时,这意味着处理器可以花费几乎所有的空闲时间等待 I/O 操作完成

当然,如果下一步是处理这些数据,非阻塞 I/O 就没那么有帮助了。

答案3

阻塞是更简单、更明显的方式:

bytes = socket.read();  // Thread "blocks" or waits if there's nothing to read
doSomethingWith(bytes);

您无法使用非阻塞实现双线,因为它涉及为每个连接设置对象,然后由单个“多路复用器”提供对象,该多路复用器不断寻找下一个传入的对象。想象一下,对于一千个或一百万个连接,这两种方法有何不同。您选择其中一种或另一种,是因为以下因素:

  • 支持的同时连接数
  • 单个客户端的平均响应时间
  • 服务器对所有客户端的总吞吐量

例如,你可能阻塞 I/O 会造成问题,因为您的系统不喜欢有数千个线程,因为每个线程打开数千个连接。但事实证明这是一个相当复杂的问题。阅读有关感知如何与 Java 互换, 包括链接幻灯片(PDF)。

答案4

在计算机科学中,块的第一个含义很简单:计算机语言中的源代码块。对于 C/C++、perl 等,花括号 { 代码块; } 界定代码块。Python 使用缩进来表示块。

第二个含义用于操作系统(通常称为内核)的上下文中,操作系统被视为管理资源的最高管理者。当不同的进程或线程(通过系统调用)请求资源(CPU、磁盘、网络、内存等)时,由于多个竞争线程或进程请求同一件事,资源可能不可用。内核将暂停某些进程或线程(等待队列),只允许某些进程或线程处理资源(执行状态)。暂停的进程处于阻塞状态或被阻塞。

操作系统可以通过硬件或软件机制实现阻塞。正在运行的进程也可以通过 Shell 和 perl 中的 sleep 命令请求操作系统暂停其执行。

如果我的解释错误,请编辑。

相关内容