首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python多线程模型

Python多线程模型
EN

Stack Overflow用户
提问于 2017-07-19 10:32:31
回答 1查看 4K关注 0票数 10

我用python学习多线程已经有一段时间了,但是我在几个问题上感到困惑-

  1. 首先,这些线程是由python线程库用户级还是内核级线程创建的?

书中说,用户级线程必须映射到内核线程,而操作系统只创建和维护内核级线程。

在python 线程库中将使用哪个线程模型?此外,谁在内核级线程和用户级线程之间做出选择?是操作系统还是程序员有发言权?

如果使用多对一模式 (如图所示),我认为它不是真正的多线程,因为所有线程都映射到单个内核线程。

  1. 有没有办法指导操作系统在我的python程序中坚持某个线程模型?
  2. 是否可以将进程的所有正在运行的线程分别标记为内核或用户级别来显示它们的状态。另外,可以显示这两个级别(用户和内核)之间的映射吗?
EN

回答 1

Stack Overflow用户

发布于 2017-07-19 10:59:29

通常,您从不直接创建“内核级线程”--在用户空间中所做的一切都是在用户空间中执行的,否则即使是随机浏览器JavaScript也会在内核级别执行,从而保证整个互联网在几秒钟内就会被关闭。

因此,在大多数语言中,线程接口(如果支持的话)与实际的“内核线程”相去甚远,根据实现的不同,它要么链接到较低级别的线程接口(例如pthreads),要么只是模拟用户不知道的线程。沿着这条链,pthreads可能会也可能不会链接到实际的“内核”线程(这在Linux上是正确的,但在Windows上有另一层分离),但即使这样,代码也在用户空间中执行--“支持”内核线程是为了控制代码单独运行的调度。

当涉及到CPython时,它的threading接口链接到pthreads,因此,从技术上讲,有一个从pthreads线程一直到内核线程的链。然而,Python也有可怕的吉尔,它基本上保证了,除了与I/O相关的一些罕见的例外,没有任何两个线程同时执行,这使得它的线程在协作的多任务处理模式下运行。但是,由于在大多数系统进程中也有内核线程支持,所以仍然可以通过使用multiprocessing接口来充分利用它们。

而且,在您的系统上有多个内核/CPU之前,甚至内核线程都是以协作的多任务模式执行的,因此,从技术上讲,内核线程并不像您所描述的那样保证实际的多线程。

至于如何列出线程及其依赖项,可以使用top -H -p <pid>显示进程的线程树。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45187940

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档