据我所知,驱动编程的是性能因素multi-threading
在大多数情况下,但不是全部。 (无论 Java 还是 Python)。
我正在读这个启发性文章 https://stackoverflow.com/questions/265687/why-the-global-interpreter-lock on GIL
在SO中。文章总结了python采用GIL
机制;即只有一个single Thread
可以执行python byte code
在任何给定时间。
这使得single thread
应用程序确实更快。
我的问题如下:
因为如果只有一个Thread
在给定点提供服务,确实multiprocessing
or thread
模块提供了一种方法来克服 GIL 施加的限制?如果没有,它们提供哪些功能来进行真正的multi-task
work
在已接受的答案中的评论部分提出了一个问题,但没有做出答复?我心里也有这个问题
^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 密集型程序的众多示例之一:
假设你想构建一个网络爬虫,你必须爬取很多很多网站,并将它们存储在数据库中,这会花费多少时间?等待服务器发送数据,实际下载数据并将其存储在数据库中,这里没有 CPU 限制。在这里,您可以使用一组爬网程序而不是单个爬网程序来获得更快的爬网程序。通常,在一个网站几乎关闭且响应速度非常慢(约 30 秒)的情况下,在此期间,单线程应用程序将等待该网站,您就会陷入困境。在多线程应用程序中,其他线程将继续爬行,这很酷。
另一方面,由于每个进程有一个 GIL,因此您可以使用多处理来执行 CPU 密集型计算。
顺便说一句,它或多或少存在一些没有 GIL 的 Python 部分实现,我想提一下我认为这是实现一些很酷的东西的好方法:pypy STM http://pypy.readthedocs.org/en/latest/stm.html。通过搜索“摆脱 GIL”,您会很容易找到很多关于该主题的线程。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)