似乎当我谷歌我的\ O是什么时,我得到的命中显示它代表"输入"和"输出"。 我看到Python上的博客标题为“#34; Python文件I \ O-第19部分,高级文件输入和输出" 如果我去Python文档并搜索输入/输出: https://docs.python.org/3/tutorial/inputoutput.html 示例仅限于打印语句和读/写文件。
我在"输入和输出"中看不到网络服务或网络的输入/输出示例。尽管如此,Python文档的一部分 看到这些概念经常使用的术语I / O.在引用Web服务和网络时,I / O是否包含相同的含义?
我最近在GIL和多线程上做了很多阅读
除了I/O bound
之外,还会弹出I/O
这个词。
I / O绑定似乎是指存在大量CPU空闲状态的状态, 由于将数据传输到CPU的速度很慢。多线程似乎经常用于Web服务和网络,因为我假设有很多 CPU空闲,即I / O限制了繁重的任务,因为您总是等待用户输入进行操作。
现在print
语句以及读/写文件是否也被认为是I / O绑定任务?
最后,关于GIL的Python文档中也出现了I/O
这个术语:
" GIL存在争议,因为它阻止了多线程CPython程序 在某些情况下充分利用多处理器系统。请注意,可能阻止或长时间运行的操作,,例如I / O 图像处理和NumPy数字运算,都发生在GIL之外。因此,仅在多线程程序中花费大量时间在GIL内部,解释CPython字节码,GIL成为瓶颈。"
因此,本文中对I / O的引用表示所有I / O任务都绕过了GIL -
这是否意味着print, reading and write to files, webservices, networking
等 - 所有这些类型的任务绕过GIL并且可以被多线程利用?
谢谢。
答案 0 :(得分:1)
是的,I / O代表输入/输出。这是从您的程序的角度来看。输入可以来自许多不同的来源,例如键盘,鼠标或网络连接。同样,可以将输出发送到许多不同的来源。大多数编程语言定义了可以与各种源和目标一起使用的输入和输出操作。这使得编写代码变得更加容易,因为我们只是接收和发送数据而不必担心它来自或去往的详细信息。