一些多线程编程的资料建议开启和 CPU 核数相同的线程数,说是有利于多核并行执行。 操作系统管理的进程和线程很多,有没有可能长期处于这样一种情况:双核 CPU ,一个程序开启了两个线程。但是有一个核长期在处理其他进程,所以只有一个核在处理这个程序的两个线程(以及其他进程)。 这种情况下开启两条线程不会比开启更多线程要好。
噢补充一句,的确有 CPU BOUND THREAD 的,但是除非你手动制定,不然都是由操作系统进行调度的。(当然就算你程序使用 100%的 CPU ,操作系统也不会把所有 CPU 调度给你的,不然其他进程就没有资源了) 多线程的意义在于,能同时使用多个核心的 CPU 。在高负载情况下,可以跑满线程个数的 CPU 。单线程就只能跑满一个核心,对于服务器来说,同时面向多个独立的用户,相互没有关联,开线程再合适不过了
caixiexin
2016-11-05 11:54:41 +08:00
看是计算密集型还是 io 密集型,前者开一和核心数一样的线程数才有效果。还有就是编程语言, Python2.x 用这种方式也不能最大利用 CPU 。
kindjeff
2016-11-05 12:24:50 +08:00
@ovear 你说的貌似和我问的没什么关系吧。我的意思是一些资料里推荐的开启和 CPU 核数相同的线程数是有意义的吗。
@caixiexin 即使是计算密集型,在我举例的情况下,双线程也不会比更多线程好啊;因为 Python 的多线程确实是不能多核并行的,本身开启和 CPU 核数相同的线程数就没有什么意义。