Python多线程模型

2024-05-05

我已经研究 python 中的多线程有一段时间了,但是我对一些问题感到困惑-

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

书上说用户级线程必须映射到内核线程并且 操作系统仅创建和维护内核级线程。

python中将使用哪种线程模型线程库 https://docs.python.org/3/library/threading.html?此外,谁在内核级线程和用户级线程之间做出选择?是操作系统的问题还是程序员有发言权?

If the 多对一模型 https://www.tutorialspoint.com/multi-threading-models(如图所示)使用,我认为这不是真正的多线程,因为所有线程都映射到单个内核线程。

  1. 有没有办法指导操作系统在我的 python 程序中遵循某种线程模型?

  2. 是否可以显示进程的所有正在运行的线程,并将其状态分别标记为内核或用户级别。还可以显示两个级别(用户和内核)之间的映射吗?


通常,你永远不会直接创建“内核级线程”——你在用户空间中所做的一切都会在用户空间中执行,否则即使是随机的浏览器 JavaScript 也会在内核级执行,保证在几秒钟内整个互联网将陷入黑暗。

因此,在大多数语言中,线程接口(如果支持)与实际的“内核线程”相距甚远,并且根据实现,它将链接到较低级别的线程接口(pthreads https://en.wikipedia.org/wiki/POSIX_Threads例如)或者只是模拟用户不知道的线程。顺着那条链条往下走,pthreads可能会或可能不会链接到实际的“内核”线程(在 Linux 上确实如此,但在 Windows 上有另一个级别的分离),但即使如此,代码也会在用户空间中执行 - “支持”内核线程就在那里为了控制代码单独运行的调度。

说到 CPython,它threading https://docs.python.org/3/library/threading.html接口链接到pthreads因此,从技术上讲,存在一条从 Python 线程一直到内核线程的链。不过,Python 也有可怕的GIL https://wiki.python.org/moin/GlobalInterpreterLock几乎可以保证,除了一些主要与 I/O 相关的罕见异常之外,不会有两个线程同时执行,这几乎使其线程以协作多任务模式运行。然而,由于大多数系统进程也由内核线程支持,因此您仍然可以通过使用multiprocessing https://docs.python.org/3/library/multiprocessing.html界面。

另外,除非系统上有多个核心/CPU,否则内核线程都会以协作多任务模式执行,因此从技术上讲,内核线程不能保证您所描述的实际多线程。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python多线程模型 的相关文章

随机推荐

  • 从网站保存嵌入的 pdf

    我正在编写一个小型 C 应用程序来管理供应商提供的 化学品 安全数据表 目前 我手动搜索该化学品并保存 pdf 并在我的程序中添加指向 pdf 的链接 问题是我还有很多化学品需要处理 所以最好将过程自动化 例如 化学品的部件号如下 2710
  • 如何使用 OpenCV 检测图像帧中的对象?

    我正在使用 Raspberry Pi 开发一个漫游器 它将清扫房间并捡起掉落在地上的物体 为了检测物体 我使用了在流动站操作开始时拍摄的参考图像 以及每 10 秒单击一次的图像 新图像 为了确定图像帧是否发生变化 我在参考图像和新图像之间进
  • 我应该在查询时调用 ToListAsync()

    不久前 我开始接触 C 并正在寻找一些如何编写代码的最佳实践 现在 我正在使用 EF Core 并具有以下代码 var details dbContext Details Where x gt x Name Button foreach v
  • CDI/Weld - 结束对话后如何处理浏览器页面刷新?

    在使用 CDI 的早期 我导航到一个长时间运行的页面 使用 faces redirect true 进行对话 因此我有一个类似 myPage xhtml cid 1 的 URL 在某个时刻我结束了谈话 我的意思是这必须是合理的事情 或者你也
  • 通过 IoC 容器实例化 WCF 服务

    是否可以使 WCF 运行时通过 IoC 容器而不是通过其通常的进程来实例化服务 此外 考虑到容器的类型生活方式配置与服务的 InstanceContextBehavior 之间存在潜在冲突 这种方法会是一个糟糕的主意吗 我知道我可能完全问错
  • 在 WordPress 页面上嵌入 swf

    我正在尝试将 swf 嵌入到 WordPress 页面中 这听起来很简单 但它不起作用 我不明白为什么 我已将所有相关文件上传到服务器上 并且我相当确定所有文件路径都是正确的 包含 fla 和 swf 文件的文件夹还包含一个 index h
  • 如何在 Xcode 7 beta 4 中调用 SecItemCopyMatching?

    在使用 Swift 的 Xcode 6 和 7 的早期版本中 以下语法可以使用 var secureItemValue Unmanaged
  • 在 JavaScript onClick 事件处理程序中转义双引号

    下面的简单代码块可以在静态 HTML 页面中提供 但会导致 JavaScript 错误 您应该如何转义中嵌入的双引号onClick处理程序 即 xyz 请注意 HTML 是通过从数据库中提取数据动态生成的 其中的数据是其他可能带有单引号或双
  • 从列表中的每个项目的支持 bean 方法中设置 itemDisabled

    我有一个单选按钮列表 并且想根据支持 bean 方法的结果禁用某些项目
  • 如何检查 firebase 中是否存在孩子? [复制]

    这个问题在这里已经有答案了 我有一个 firebase 它有一个名为 users 的节点 用户给出一个用户名 我想检查该用户名是否已作为用户节点的子节点存在 这是我目前正在尝试的代码 平台是安卓 String myUsername user
  • 如何更改 Kotlin 上生成的 TODO() 函数体?

    我需要在我的代码上留下一些稍后要做的事情TODO 自动生成的会产生一个很长的评论 如下所示 TODO not implemented To change body of created functions use File Settings
  • Requests-html 导致 OSError: [Errno 8] 调用 html.render() 时执行格式错误

    我正在使用 requests html 并尝试渲染功能 但收效甚微 当我使用 python3 8 运行这个脚本时 usr bin python3 from requests html import HTML file scrape temp
  • 您忽略了哪些 PEP 8 准则,哪些是您坚持的? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 多年来 我编写的 Python 越多 我就越发现自己同意大多数准则 尽管我出于自己的原因始终有意地违反了一些准则 我很想知道 PEP 8 也可能
  • 在 Android 中的计时器内运行异步任务

    我正在开发一个基本的聊天类型应用程序 目前我正在运行代码 如下所示 class GetMsgs extends AsyncTask
  • 长按 UIButton

    我想知道如果有人按住 UIButton 按键的时间过长 我是否可以捕获 UIButton 的事件 通过通知或其他机制 比按一次按钮的时间更长 假设有人按住按钮几秒钟 谢谢 你可以加UILongPressGestureRecognizer h
  • Android 是否可以同时使用前后摄像头[重复]

    这个问题在这里已经有答案了 我想同时使用设备的前置和后置摄像头 在我的应用程序中 屏幕的前半部分将显示后置摄像头的预览 屏幕的下半部分将显示前置摄像头的预览 我尝试过设置两个不同的相机预览 但是当我打开应用程序时 屏幕的前半部分 显示后置相
  • 将文件附加到 WCF REST 服务响应

    我有一个看起来像这样的资源 users id summary format format When format是 xml 或 json 我用一个由 WCF 自动编码的用户摘要对象进行响应 到目前为止还不错 但当format等于 pdf 我
  • 什么是样板代码、热点代码和热点?

    我知道这些术语是在性能实现 优化的背景下使用的 最近一直在研究这个问题 并尝试过搜索 但没有得到任何例子 清楚地阐述 描述这些概念以及在现实世界开发场景中实现这些问题 概念 有人可以彻底解释这些术语 示例场景以及可能使用这些概念和术语的地方
  • 如何在 jQuery 中检查 null 对象

    我正在使用 jQuery 我想检查页面中是否存在某个元素 我写了以下代码 但它不起作用 if btext i null alert btext i text btext i text Branch i 如何检查元素是否存在 检查jQuery
  • Python多线程模型

    我已经研究 python 中的多线程有一段时间了 但是我对一些问题感到困惑 首先 python线程库创建的线程是用户级线程还是内核级线程 书上说用户级线程必须映射到内核线程并且 操作系统仅创建和维护内核级线程 python中将使用哪种线程模