同一进程的线程可以运行在不同的核心上吗?

2023-12-20

进程生成的线程可以在多核系统的不同核心上运行吗?

假设我有一个进程 P,从中生成了两个线程 t1 和 t2,它是一个具有两个核心 C1 和 C2 的多核系统。我的问题是:

  1. t1 和 t2 是否可以与进程 P 运行在同一内存空间上?
  2. 线程 t1 是否可以在与进程 P 运行的不同内核中执行?例如:进程 P 运行在核心 C1 上,线程 t1 运行在核心 C2 上?

进程产生的线程可以在多核系统的不同核心上运行吗?

是的。假设硬件有多个核心,并且操作系统支持/允许。 (现代操作系统确实支持它。是否允许通常取决于管理策略。)

线程 t1 和 t2 会与进程 P 运行在同一内存空间吗?

是的。他们将使用相同的内存/虚拟地址空间。

线程 t1 是否可以在与进程 P 运行的不同内核中执行?例如,进程P运行在核心C1上,线程t1运行在核心C2上?

这个问题没有意义。

POSIX 进程没有执行代码的能力。执行代码的是进程线程。因此,“进程在核心 C1 上运行”的想法是荒谬的。

请记住:每个(实时)POSIX 进程has至少一个线程。该进程从一个线程开始,如果需要,该线程可以生成其他线程。线程到核心的实际分配是由操作系统完成的,并且会随着进程的生命周期而变化。

这就是线程在现代操作系统中的工作方式。对于 Linux,当前(符合 POSIX 标准)线程实现方法是在 2003 年的 Linux 2.6 中引入的。在 Linux 2.6 内核之前,Linux 没有真正的本机线程。相反,它有一个名为 LinuxThreads 的工具:

“LinuxThreads 存在许多问题,主要是由于使用了clone系统调用来创建共享父进程地址空间的新进程。例如,线程具有不同的进程标识符,导致信号处理出现问题; LinuxThreads 使用信号 SIGUSR1 和 SIGUSR2 进行线程间协调,这意味着这些信号不能被程序使用。”

(From 维基百科 https://en.wikipedia.org/wiki/LinuxThreads.)

在(2003 年之前!)LinuxThreads 模型中,“线程”实际上是一个进程,进程可以与其他进程共享其地址空间。

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

同一进程的线程可以运行在不同的核心上吗? 的相关文章

随机推荐

  • 连接 cakephp 2.0 和 PostgreSQL

    我正在使用 cakephp 2 0 和 wamp 服务器 我已经在 php 中启用了 postgres 的 pdo 并尝试连接到 Postgres 但它仍然说有错误 我的登录名和密码也经过双重确认 以下是database php文件的代码
  • 创建由每个子数组的最大值组成的数组无法按预期工作

    找到每个子数组中最大的数字 然后将这些最大的数字组成一个数组 4 5 1 3 13 27 18 26 32 35 37 39 1000 1001 857 1 我写了一些代码 但我不知道它有什么问题 也许 Array push 方法不起作用或
  • 为什么 Scala 的“列表”实现为链表

    我一直认为链表的好处是您可以添加或删除项目 尤其是不是从末尾 而无需复制大量元素 这要归功于指针的优点 然而 Scala 的List是不可变的 至少默认情况下 拥有不可变链表有什么好处 因为有明确的缺点 例如不是 O 1 元素访问 Than
  • 您能帮助我了解更多有关 VBA 错误处理的良好实践吗?

    过去两天我一直试图更好地理解 VBA 错误处理 但仍然对实际发生的情况存在疑问 下面的文字描述了我所做的一些实现 并且在描述中嵌入了一些问题 我真的很需要人们帮助我完善我的理解并给我一些指导 我已经掌握了通常的基础知识 并且正在尝试更多地关
  • JavaMail、IMAP、大量文件夹的性能

    我们正在为 IMAP 帐户开发一个基于 java 的邮件客户端 并使用最新的 java 邮件 api 1 5 6 我们的客户拥有包含 400 多个文件夹的邮件帐户 用户在文件夹上执行检查邮件并迭代每个文件夹并获取新消息 例如 folder
  • MySQL UPDATE、MAX、JOIN 查询

    我有两张桌子 manu table product id manufacturer 1 ford 2 ford 3 toyota product table product id score 1 80 2 60 3 40 我想将每个制造商得
  • 在 Ember.js 中退出路由时如何*不*销毁 View

    关于新的 Ember js 路由系统 描述here http emberjs com guides outlets 如果我理解正确的话 当您退出路线时 视图会被破坏 有没有什么方法可以绕过退出路线时视图的破坏 以便在用户重新进入路线时保留视
  • 电子启动拖动目标操作系统路径

    我一直在研究 Electron 应用程序的文件系统拖放功能 我想要的是 我需要知道 如果我将一个 div 从电子应用程序拖到操作系统中 我只想知道目标操作系统路径 我对将文件操作复制到该路径不感兴趣 因为我有自定义逻辑 类似的解决方案 我了
  • 更改 docker 容器内的 /proc/sys/kernel/core_pattern 文件

    我该如何改变 proc sys kernel core patterndocker 容器内的文件没有特权模式 是否有任何标志要传递给docker daemon or docker run或任何相关的Dockerfile 内核不支持每容器模式
  • Onsubmit 事件被 onchange 默默杀死

    如果同时调用 Onsubmit 事件可以默默地终止 onchange 事件 我假设 js 引擎中存在竞争条件 在 chrome FF3 FF6 和 IE9 中进行了测试 要重现 您需要更改输入内容并单击提交按钮 在输入更改和提交按钮单击之间
  • 使用匿名函数时更新 DTM 预定义数据元素时出现问题

    如果我有一个名为 CS Test 的预定义数据元素 如下所示 return function var rvalue default custom script value from some data layer return rvalue
  • 使用 Doctrine2 存储动态字段

    在我们的应用程序中 我们希望使用doctrine2 但是 我们想要提供一项功能 但我完全不知道它是如何工作的 我们希望客户能够为我们的标准对象定义自定义字段 因此 这些字段将是即时生成的 而不是由条令已知和映射的对象定义的一部分 我们的第一
  • 即使请求超时后,spring MVC Callable 执行仍会继续吗?

    我有一个像这样的异步处理程序方法 RequestMapping custom timeout handling public ResponseBody WebAsyncTask
  • 监控 Mathematica 中并行计算的进度

    我正在建造一个大型ParallelTable 并希望对计算的进行情况保持一定的了解 对于非并行表 以下代码效果很好 counter 1 Timing Monitor Table counter n 10 6 ProgressIndicato
  • winRT拖放,交换两个项目而不是插入

    我是 WPF 的长期用户 但对 WinRT 还很陌生 我想知道是否有一种内置方法或简单方法可以将交换功能集成到容器中 以便交换交换容器中的两个项目 所需的行为是拖动一个项目并将其放在另一个项目上 并交换被拖动的项目和被拖动到的项目在容器中的
  • Vagrant 打包和重新打包的区别

    有什么区别vagrant box repackage docs https docs vagrantup com v2 cli box html and vagrant package docs https docs vagrantup c
  • torch.mean() 源代码的位置

    我正在尝试查找 torch mean 的源代码 但无法在 pytorch github 中找到它 It https pytorch org docs stable torch html torch mean正在数学运算下 但我根本找不到它
  • vb.net。如何将数据集绑定到DataRepeater?

    我正在寻找一个 vb net 示例 说明如何将数据集 数据表绑定到数据重复器并将数据元素绑定到数据集 数据表的列 谢谢 起初我以为你想要一个网络中继器 但从你的评论中我意识到你的意思是 Microsoft VisualBasic Power
  • 获取 Windows 句柄的 WNDPROC

    存在任何 Windows api 函数来检索WNDPROC用于 Windows 句柄 提前致谢 Use 获取窗口长指针 http msdn microsoft com en us library ms633585 aspx hwnd GWL
  • 同一进程的线程可以运行在不同的核心上吗?

    进程生成的线程可以在多核系统的不同核心上运行吗 假设我有一个进程 P 从中生成了两个线程 t1 和 t2 它是一个具有两个核心 C1 和 C2 的多核系统 我的问题是 t1 和 t2 是否可以与进程 P 运行在同一内存空间上 线程 t1 是