如题,windows环境,四个核,开四个线程取消息队列,会不会直接只分配给一个核。
如果线程之间没有依赖关系(比如同步、加锁),并且进程本身拥有所有的逻辑CPU,那么线程会在所有逻辑CPU上调度。
个人理解:在各个线程计算的过程,应该会在不同的运算器上进行调度,但从同一个消息队列取数据的时候,还是会因为加锁同步的问题有阻塞的。
如果这样就真正能实现多线程运行,每个线程每个时间片内都能得到运行
N个线程分配几个CPU核来执行取决于Windows内核线程调度算法。Windows提供了一些API(如SetThreadAffinityMask)可以影响内核对线程的调度。
看你用什么并行方式了,如果是线程池,他会根据任务量多少合理分配cpu;openmp即使你开了2n个线程,他也不一定