https://realpython.com/async-io-python/介绍了多线程和多线程处理,但它没有说明什么是一般有效的,还是只在Python环境中有效。例如,它说:
并发性既包括多处理(适合于CPU绑定任务),也包括线程(适合于IO绑定任务)。
以前,我已经用其他编程语言(如C/C++ )开发了并发应用程序,这句话对我来说似乎很奇怪。为什么多线程一般不适合于CPU绑定任务和IO绑定任务的多处理?AFAIK和AFAIK都可以有效地用于这两项任务。两者之间的决定取决于其他条件,例如任务粒度、共享状态的数量和任务之间的执行顺序依赖,以及进程/线程创建成本(对于进程来说,特别是在某些OSes中)。上面的语句是否特定于Python环境及其全局锁解释器限制?
发布于 2020-03-05 16:19:07
正如Go语言的共同发明者Rob所说:
来自卢西亚诺拉马略的书,“流利的Python”第18章,第557页。
他们想说的是,当您确实需要多个CPU绑定任务或并行任务时,多处理(它也是Python中用于并行化的库的名称)是解决问题的方法。在Python中,这是通过使用例如Python多处理模块绕过GIL来实现的。
在Python中,有一种叫做GIL的东西,当时只允许运行一个线程。您需要绕过GIL来使用并行性。同时,即使有GIL限制,您也可以实现并发:一次只能运行一个线程!!
在Python中,您可以通过以下方式实现并发:
因此,如您所见,您有3种并发方式,但由于GIL的限制,您不能在并行任务或CPU绑定任务中使用它。
我找到了一篇可以帮助您处理并发性和异步I/O的文章。
要在Python中实现并行性,您需要绕过GIL。一个帮助实现这个功能的python模块称为“多处理”。
关于你的怀疑:
.(它说多处理是CPU绑定任务的理想选择,多线程是IO绑定任务的理想选择)只适用于Python环境。
我不能说它是否只适用于Python,因为我不知道其他语言,但例如,Javascript因其异步I/O方法而臭名昭著,同时C#、C++、Java实现了并发性和并行性,没有任何不便或限制使用线程。C#作为JavaScript很久以前也实现了异步I/O。
大卫比兹利和ŁBeazley Langa在下面的会谈中都提到了这一事实。
链接也在下面的演示文稿中。
https://stackoverflow.com/questions/60513406
复制相似问题