Linux和windows的CPU执行策略
今天更换了服务器,把所有的服务部署到linux上。服务启动,发现cpu多数为均匀分布,平均到30~40%左右。但是到windows上面会出现一核工作多核围观的现象出现。
Linux 中操作系统的对 CPU 采用的是时间片算法,所有进程排成一个队列,操作系统按照顺序给每个进程分配一段时间,即该进程允许的执行时间,如果时间到了该进程还在运行,则该进程的 CPU 会被剥夺给下一个进程,该进程用完这个时间之后会被移到队列的尾部等待下一次分配;
windows 使用的抢占式算法,根据进程的优先级、饥饿程度去分配,如果一个进程拿到 CPU 之后,除非自己主动放弃 CPU,不然会一直占用(如果发现某个线程长时间霸占 CPU,会强制使这个线程挂起,因此在实际上不会出现 “一个线程一直霸占着 CPU 不放” 的情况);
Thread.Sleep(N),告诉 CPU 在 N 时间内不用考虑自己,重新进行资源分配 (根据优先级 和饥饿程度);
Thread.Sleep(0), 触发操作系统重新立刻进行一次 CPU 竞争,包含自己;