现在所有的高性能服务器程序,几乎都会使用到线程池技术,从而更好且有效的榨干服务器性能。而创建并销毁线程的过程势必会消耗内存。而在日常开发中内存资源是及其宝贵的,所以QT 多线程之线程池QThreadPool就有很大用处了。它可以用来管理线程的优先顺序,防止创建过多的线程,起到很好的管理作用。
线程的创建和销毁是有性能开销的,当我们有少量业务需要处理时,我们可以放到线程中完成,甚至可以多开几个线程并行处理。
那么,问题来了,如果需要海量的数据处理,难道无休止的开线程下去吗?
首先,要明白CPU的性能是有限的,每个线程好比一个处理时间片,多个线程之间切换处理,CPU线程上下文来回切换,这个也是需要消耗时间的。所以,物极必反,当线程数量到达一个点后,可能消耗在线程切换的时间,会大于实际线程处理业务的时间,这个可以想象的到。
那么很容易明白:线程数并不是越多越好,而是某个范围或者某个经验值。
一般来讲,我们可以认为,最佳性能线程数==CPU逻辑核心数量,比如CPU是4核8线程,那么开8个线程可以达到性能最佳。
一般电脑是开启超线程的,也就是4核可以模拟出8个逻辑核,故称4核8线程。
QThreadPool线程池默认最大线程数,也是CPU逻辑Core的数量。
严格意义来讲,最佳线程数还与处理业务类型有关,如业务属于IO密集型、CPU密集型,根据经验推断: