- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
据我所知,在大多数情况下,多线程
驱动编程的是性能因素,但并非全部。 (无论是 Java 还是 Python)。
我正在读这个enlightening article在 SO 中的 GIL
上。文章总结python采用了GIL
机制;也就是说,在任何给定时间,只有一个单个线程
可以执行python 字节码
。这使得 单线程
应用程序真正更快。
我的问题如下:
因为如果在给定点只有一个Thread
服务,multiprocessing
或thread
模块是否提供了一种方法来克服由吉尔?如果不是,它们提供了哪些功能来完成真正的多任务
工作
采纳的回答上面帖子的评论区有提问,但是一直没有回答?我也有这个疑问
^so at any time point of time, only one thread will be serving content to client...
so no point of actually using multithreading to improve performance. right?
最佳答案
你对 GIL 的看法是正确的,使用多线程进行 CPU 密集型计算没有意义,因为 CPU 只会被一个线程使用。
但前面的陈述可能启发了您:如果您的计算不受 CPU 限制,您可以利用多线程。
一个典型的例子是您的应用程序大部分时间都在等待某事。
非 CPU 绑定(bind)程序的众多示例之一:假设你想构建一个网络爬虫,你必须爬取很多网站,并将它们存储在数据库中,这需要多少时间?等待服务器发送数据,实际下载数据,并将其存储在数据库中,这里没有 CPU 绑定(bind)。在这里,您可能会使用一组爬虫而不是一个爬虫来获得更快的爬虫。通常在一个网站几乎崩溃并且响应非常慢(~30 秒)的情况下,在此期间,单线程应用程序将等待该网站,你被卡住了。在多线程应用程序中,其他线程将继续爬行,这很酷。
另一方面,由于每个进程有一个 GIL,您可以使用多处理来进行 CPU 密集型计算。
作为旁注,它或多或少地存在一些没有 GIL 的 Python 部分实现,我想提一下我认为实现一些很酷的东西的好方法:pypy STM .通过搜索“摆脱 GIL”,您会很容易地找到很多关于该主题的线索。
关于python - python 中的多线程 : is it really performance effiicient most of the time?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24744739/
据我所知,在大多数情况下,多线程 驱动编程的是性能因素,但并非全部。 (无论是 Java 还是 Python)。 我正在读这个enlightening article在 SO 中的 GIL 上。文章总
我是一名优秀的程序员,十分优秀!