
简单点说吧,处理器核数(包含超线程数)是一种执行资源,资源数量就是核数个数。应用程序的线程数就是服务请求数。而操作系统的作用是如果用有限的资源来服务好应用程序的请求,这就是进程调度的功能。
一般情况下,服务请求线程会“相对公平”地分配到核上运行,并且在时间片上轮流使用的,即并发执行(不一定是并行执行)。
比如系统有4个核,如果:
1、只有3个线程,那就分配到3个核上运行
2、只有8个线程,那就每个核分配两个线程运行
3、只有10个线程,那就有些核跑3个线程,有些核跑2个线程
相对,这不是绝对的,要看应用程序使用的是什么调度策略,OS是尽量让每个线程的平均等待时间最小化。
如果系统只有4个核,大数值计算的应用,到底是拆成4个线程,还是8个线程,还是12个线程,这些在并行框架里面都有分析,要看你的具体应用计算特征才能知道哪种拆分性能高。