- cplusplus/
- C++ 如何在另一个内核上启动线程,而不将处理器关联设置为特定的内核?
C++ 如何在另一个内核上启动线程,而不将处理器关联设置为特定的内核?
C++ 如何在另一个内核上启动线程,而不将处理器关联设置为特定的内核?,c++,linux,stl,multiprocessing,C++,Linux,Stl,Multiprocessing,如何在另一个内核上启动std::thread,而不显式地将处理器关联设置为特定的内核
我知道线程可以分配给一个特定的内核,但是有没有办法告诉调度程序在另一个内核上启动进程,并让调度程序决定在哪个内核上运行进程最好?简单的回答是,您没有
你有两个选择:
您可以通过设置其关联性来选择线程可以运行的处理器核心
您可以让调度程序选择线程将在哪些内核上运行
要么由您选择,要么由调度程序选择。就这么简单
对于您似乎想要的(启动一些线程以便它们在多个内核上运行),您可能希望让调度程序执行调度
设置处理器关联性
如何在另一个内核上启动std::thread
,而不显式地将处理器关联设置为特定的内核
我知道线程可以分配给一个特定的内核,但是有没有办法告诉调度程序在另一个内核上启动进程,并让调度程序决定在哪个内核上运行进程最好?简单的回答是,您没有
你有两个选择:
您可以通过设置其关联性来选择线程可以运行的处理器核心
您可以让调度程序选择线程将在哪些内核上运行
要么由您选择,要么由调度程序选择。就这么简单
对于您似乎想要的(启动一些线程以便它们在多个内核上运行),您可能希望让调度程序执行调度
设置处理器关联性基本上适用于您对线程调度有足够了解的情况,这样您就可以比一般用途的调度程序做得更好。至少从我所看到的情况来看,大约75%的人设置了亲和性,这基本上是一个错误,他们最终会减慢代码的速度。另外24%的人,他们没有伤害,但也没有真正的好处。而且,可能有多达1%的时间,他们实际上完成了一些有用的事情
请放心,编写调度器的人通常都知道,如果您启动了十几个线程,那么它们并不是都在一个内核上运行的。最简单的(可能也是最常见的)情况是,it只需在所有可用内核上调度线程。如果没有,通常是因为用户(至少间接地)配置了系统(例如,笔记本电脑的部分电源管理可能是当它使用电池时,它限制了使用中的内核数量,至少在某些情况下)。标题说明了如何在另一个内核上启动线程。问题的主体是从另一个核心开始这个过程。对不起,如果我站错了,你能更准确一点吗?@Neb-thread=process@Dave线程的全部目的不是启动另一个进程。@user0042我的理解是线程调用linux内核abi,它分叉父进程并创建子进程?问题是如何确保新流程在不同的核心上启动(与相同的核心相比)?我知道调度程序很可能会切换它,但是有没有办法告诉调度程序从一开始就在不同的核心上运行它?@Dave例如,您可以使用以下命令增加调度并发任务的机会。但除此之外,没有其他方法,只能像您提到的那样设置处理器相关性。
- Math 倍频程/Matlab:如何绘制多项式的根
mathmatlaboctave
- Math 比较两个角度
mathvectorgeometry
- Math 导数计算器
math
- Math 什么';这是向非CS人员解释为什么CS概念对他们的生活很重要的最佳方式?
mathcoding-stylecomputer-science
- Math 多边形三角形计数优化
mathoptimization
- Math 用特征值法计算二维摄像机模型视图矩阵
mathopenglmatrixcamera
- Math 用一个方程三角化坐标
math
- Math 无法反转的数学函数?
mathencryptionhash
- Math 什么是Õ;(omicron tilde)复杂度平均值Õ;(n) vs O(n)
mathbig-o
- Math 如何将无符号数字从有符号转换为无符号(二进制和十六进制)?
mathassemblybinary
- Math 顺利转向
math
- Math 奇怪的基本数学公式
math
- Math 避免不必要的溢出
math
- Math 如何计算极限值
math
- Math “数起来”;广义地说:“是的。”不是0,1,2,9,10,11,99而是00,01,10,11,02,12,20,21,22,03,99,
mathlanguage-agnostic
- Math 计算两条多段线之间的方向角
mathgeolocation
- Math 快速放大三角形的方法
mathgeometry
- Math 将一组数字重新缩放为新比例
math
- Math 非线性尺度上的映射点
mathlua
- Math 浮点数学坏了吗?
mathlanguage-agnosticfloating-point