如果GIL存在,那么Python中多线程的意义何在?

2024-04-18 22:39:40 发布

您现在位置:Python中文网/ 问答频道 /正文

据我所知,GIL使线程不可能单独使用一个核心。在

这是一个基本问题,但是threading库的意义是什么?如果线程代码的速度与普通程序相当,那么它似乎没有用。在


Tags: 代码程序核心线程速度意义threadinggil
1条回答
网友
1楼 · 发布于 2024-04-18 22:39:40

在某些情况下,应用程序可能无法完全利用一个核心,而使用线程(或进程)可能有助于实现这一点。在

考虑一个典型的web应用程序。它接收来自客户机的请求,对数据库执行一些查询并将数据返回给客户机。假设IO操作比CPU操作慢一个数量级,这样的应用程序大部分时间都在等待IO完成。首先,它等待从套接字读取请求。然后它会等待,直到对数据库的请求被写入对数据库打开的套接字。然后它等待来自数据库的响应,然后等待将响应写入客户机套接字。在

等待IO完成可能需要处理请求的90%(或更多)时间。当单线程应用程序正在等待IO时,它只是不使用内核,而内核可用于执行。因此,这样的应用程序即使在一个内核上也有执行其他线程的空间。在

在这种情况下,当一个线程等待IO完成时,它释放GIL,另一个线程可以继续执行。在

相关问题 更多 >