gpt4 book ai didi

multithreading - Python多线程模型

转载 作者:行者123 更新时间:2023-12-04 18:58:34 24 4
gpt4 key购买 nike

我一直在研究python中的多线程,但是我对一些问题感到困惑-

  • 首先,python线程库创建的线程是用户级还是内核级线程?

  • 书上说用户级线程必须映射到内核线程和
    操作系统只创建和维护内核级线程。
    python中将使用哪种线程模型 threading library ?此外,谁在内核和用户级线程之间做出选择?是操作系统还是程序员有发言权?
    如果 many-to-one model (如图所示),我认为这不是真正的多线程,因为所有线程都映射到单个内核线程。
    many-to-one model
  • 有没有办法让操作系统在我的 python 程序中遵守某个线程模型?
  • 一个进程的所有正在运行的线程是否可以显示其状态分别标记为内核或用户级别。也可以显示两个级别(用户和内核)之间的映射吗?
  • 最佳答案

    通常,您永远不会直接创建“内核级线程”——您在用户空间中执行的所有操作都在用户空间中执行,否则即使是随机浏览器 JavaScript 也会在内核级别执行,从而保证在几秒钟内整个互联网都会变黑。

    因此,在大多数语言中,线程接口(interface)(如果支持)与实际的“内核线程”相去甚远,并且根据实现,它将链接到较低级别的线程接口(interface)(例如 pthreads )或只是模拟未知的线程给用户。沿着这条链,pthreads可能会或可能不会链接到实际的“内核”线程(在 Linux 上恰好是这样,但在 Windows 上存在另一个级别的分离),但即便如此,代码仍会在用户空间中执行——“支持”内核线程就在那里控制调度代码单独运行。

    说到 CPython,它的 threading 接口(interface)链接到pthreads因此,从技术上讲,从 Python 线程一直到内核线程都有一条链。但是,Python 也有 the dreaded GIL几乎可以保证,除了一些主要与 I/O 相关的罕见异常(exception),没有两个线程会同时执行,几乎可以使其线程在协作多任务模式下运行。但是,由于在大多数系统上,进程也由内核线程支持,您仍然可以通过使用 multiprocessing 来充分利用它们。界面。

    此外,在您的系统上有多个内核/CPU 之前,即使内核线程以协作多任务模式执行,所以从技术上讲,内核线程并不能保证您所描述的实际多线程。

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

    关于multithreading - Python多线程模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45187940/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com