猿问

多线程与线程Python

多线程与线程Python

我在努力理解多处理过关穿线..我知道多处理绕过Global解释器锁,但是还有什么其他的优势,并且可以穿线不做同样的事?



汪汪一只猫
浏览 611回答 4
4回答

繁星coding

以下是我想出的一些利弊。多处理行家分离内存空间代码通常很简单利用多个CPU和核心避免cPython的Gil限制消除了对同步原语的大多数需求,除非您使用共享内存(相反,它更像是IPC的通信模型)子进程是可中断/可杀死的。Pythonmultiprocessing模块包含了与接口非常类似的有用的抽象。threading.Thread必须与cPython一起进行cpu绑定处理。反方IPC更复杂,开销更大(通信模型与共享内存/对象)更大的内存占用穿线行家轻量级-低内存占用空间共享内存-使从另一个上下文访问状态更容易。允许您轻松地做出响应性的UI。正确释放GIL的cPythonC扩展模块将并行运行I/O绑定应用程序的最佳选择反方cPython-服从GIL不可中断的/可杀死的如果没有遵循命令队列/消息泵模型(使用Queue),然后手动使用同步原语就成了必要的(锁定的粒度需要决策)。代码通常更难理解和正确-竞赛条件的潜力急剧增加。

四季花海

线程的工作是使应用程序具有响应性。假设您有一个数据库连接,并且需要响应用户输入。如果没有线程,如果数据库连接繁忙,应用程序将无法响应用户。通过将数据库连接拆分成一个单独的线程,您可以使应用程序更具响应性。另外,由于两个线程处于相同的进程中,它们可以访问相同的数据结构-性能良好,加上灵活的软件设计。请注意,由于GIL,应用程序实际上并没有同时做两件事,但是我们所做的是将数据库上的资源锁放在一个单独的线程中,以便在它和用户交互之间切换CPU时间。CPU时间在线程之间分配。多重处理是指当你真的想在任何特定的时间做不止一件事情的时候。假设您的应用程序需要连接到6个数据库,并对每个数据集执行复杂的矩阵转换。将每个作业放在一个单独的线程中可能会有一点帮助,因为当一个连接空闲时,另一个连接可以获得一些CPU时间,但是处理不会并行进行,因为GIL意味着您只使用一个CPU的资源。通过将每个作业放在一个多处理进程中,每个作业都可以在自己的CPU上运行,并以完全高效的方式运行。

有只小跳蛙

关键的优势是与世隔绝。崩溃进程不会破坏其他进程,而崩溃线程可能会对其他线程造成严重破坏。
随时随地看视频慕课网APP

相关分类

Python
我要回答