python - 在不同设置中使用以及引用 GIL 时,术语 I/O 会出现混淆

标签 python multithreading io gil

当我用谷歌搜索 I\O 是什么时,我得到的结果显示它代表“输入”和“输出”。 我看到有关 Python 的博客,标题为“Python File I\O --第 19 部分,高级文件输入和输出” 如果我转到 Python 文档并搜索输入/输出: https://docs.python.org/3/tutorial/inputoutput.html 这些示例仅限于打印语句和读/写文件。

在 Python 文档的“输入和输出”部分中,我没有看到 Web 服务或网络作为输入/输出的示例,尽管 请参阅经常与这些概念一起使用的术语 I/O。当涉及 Web 服务和网络时,I/O 是否也包含相同的含义?

我最近阅读了大量有关 GIL 和多线程的文章,并且 除了I/O之外,术语I/Obound也出现了。

I/O 限制似乎是指 CPU 大量空闲的状态, 由于CPU获取数据的速度很慢。多线程似乎经常与 Web 服务和网络一起使用,因为我假设有很多 CPU 空闲,即 I/O 绑定(bind)的繁重任务,因为您始终等待用户输入进行操作。

现在 print 语句以及读/写文件也被视为 I/O 绑定(bind)任务吗?

最后,术语I/O也出现在有关GIL的Python文档中:

“GIL 是有争议的,因为它阻止了多线程 CPython 程序 在某些情况下充分利用多处理器系统。请注意,潜在的阻塞或长时间运行的操作(例如 I/O 图像处理和 NumPy 数字运算)发生在 GIL 之外。因此,只有在多线程程序中,在 GIL 中花费大量时间来解释 CPython 字节码时,GIL 才会成为瓶颈。”

因此本文中对 I/O 的引用表示所有 I/O 任务都绕过 GIL -- 那么这是否意味着打印、读取和写入文件、Web 服务、网络 等——所有这些类型的任务都绕过 GIL 并且可以被多线程利用?

谢谢。

最佳答案

是的,I/O 代表输入/输出。这是从你的程序的角度来看的。输入可以来自许多不同的来源,例如键盘、鼠标或网络连接。同样,输出可以发送到许多不同的源。大多数编程语言都定义了可与各种源和目标一起使用的输入和输出操作。这使得编写代码变得更加容易,因为我们只需接收和发送数据,而不必担心数据来自或去向的详细信息。

关于python - 在不同设置中使用以及引用 GIL 时,术语 I/O 会出现混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45362735/

相关文章:

python - react 编辑,只编辑discord.py中最新的命令

python - 为什么所有模块一起运行?

java - 构建键值存储

c++ - 一个类应该能够输出其内容还是另一个类应该这样做?

python - 类型错误 : metaclass conflict in python

python - 无法在窗口中显示进度条

c - 我应该为我的应用程序使用进程还是线程?

java - 线程同步——同步块(synchronized block)

Haskell IO 示例

c++ - 在 C++ 程序中显示进程完成的百分比