1
7
这不是一个真正可以回答的问题,除非您至少指定了操作系统。 C++本身对线程一无所知,它们是OS提供给执行环境的服务,并依赖于OS来实现。 作为一般观察,我非常确定Linux独立地调度线程,以便多个线程可以分布在不同的cpu和/或内核上。我怀疑Windows也会这么做。 一些OS将允许你指定线程的亲和力,线程(有时线程组)的能力,坚持一个CPU,但同样,这是一个操作系统问题,而不是一个C++。
对于Windows(根据您的评论),您可能需要阅读
this introduction
. Windows提供了
但是,通常情况下,你会发现最好不要管这些事情,让操作系统来处理——除非你对不同的行为有特殊的需求,否则操作系统几乎肯定会做出正确的决定。 |
2
4
线程分配给处理器的方式取决于应用程序运行的操作系统。一般来说,大多数操作系统不会保证线程是如何在处理器之间进行拆分的,尽管有些操作系统有一些低级的api允许您指定线程关联性。 |
3
2
如果您的线程是CPU绑定的,那么它们肯定会被安排在所有可用的CPU上。 如果线程是IO绑定的,那么如果每个CPU只有一个线程,那么大多数CPU都将处于空闲状态。这就是为什么当尝试最大化性能时,重要的是要测量正在发生的事情,或者找到每个CPU的线程的硬编码比率,或者使用操作系统线程池机制,它可以访问足够的信息以保持与CPU内核一样多的线程活动。 你通常不希望有比CPU更多的活动线程(即,在等待IO完成时不会被阻塞的线程),因为在CPU上的活动线程之间进行切换的行为确实会产生很小的成本,这可能会增加。 |
JoeZ · Do while循环不会中断 6 年前 |
JoeZ · 如果循环不工作。运行时显示重复cout。 6 年前 |
Joe · 正在展开宏以进行调试? 6 年前 |
Matthew · 自己编译公共库会提高性能吗? 6 年前 |
Barry · 在MSVC中处理宏中的额外括号 6 年前 |