python - GIL 的存在会给多线程带来什么优势?

标签 python python-3.x multithreading

如果在存在GIL的情况下,多线程程序中执行的所有子任务都是顺序发生的,那么它相当于单线程程序。为什么要用 Python 编写多线程包(multiprocessing.dummy.Pool、multiprocessing.pool.ThreadPool、concurrent.futures.ThreadPoolExecutor 等)?为什么有人应该使用它们? (这与多处理无关)

最佳答案

有两件事:

  1. GIL 会不时发布。例如,当您尝试执行一些冗长的操作(从文件读取、写入文件、通过网络发送等)时。这允许一些交错操作 - 在一个线程中读取,在另一个线程中处理。

  2. 多线程不仅仅是性能,还有其他好处 - 例如表达的简便性。想象一下,您有两个“并行”运行的算法,它们相互通信并交换数据。您将每个算法放在它自己的线程上,进行同步(以确保线程切换在可能的情况下发生),然后就可以开始了。如果没有多线程,您就必须依赖事件编程,这很困难但很容易扩展。一个很好的例子是各种基于 session 的服务器,例如 ftp 服务器。编写多线程多用户 ftp 服务器比单线程容易得多。

一般来说,是的,如果你使用线程来提高性能,那么 python 的线程就没有意义。但Python并不是为了性能,而是为了编写(和修改)代码的容易程度。线程确实对并行代码有很大帮助,即使它们不提供任何多线程性能优势。

关于python - GIL 的存在会给多线程带来什么优势?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56650776/

相关文章:

python - 我想找到一天中办公室最高峰的时间

python - 如何拆分数据框单元格中的数据并在拆分时执行 Pandas groupby?

安卓本地服务: are they that useful?

java - 消费者和 worker 模式

java - 我们可以有一个弱线程吗?

python - 如何使用pytest基于服务器输出测试客户端-服务器交互?

python - Python 3 字符串排序是否取决于语言环境?

python - 在 Python 中打开文件和 with 语句

python - 使用对特定键值的理解从字典列表创建列表

python - 索引错误 : too many indices when working with pandas data