我有两个问题。 1.他在线程和线程池之间有什么区别?我的系统中可以有多个线程池(不是线程)吗? 2.我一直在读,线程池中线程的一般大小应与处理器数量相同或比处理器大一倍。我使用的是四核处理器,这意味着我可以在一个线程池中拥有4或5个线程。但是,在任务管理器下,我的系统随时显示1000多个线程处于活动状态。
答案 0 :(得分:1)
- 他在线程和线程池之间有什么区别?
线程是单个执行流程。线程池是这些线程的组。通常,线程池中的线程会无限期地保持活动状态(即直到程序关闭),以便随着每个新的工作请求的到来,可以将其移交给线程池中的下一个可用线程进行处理。 (这是有益的,因为唤醒新线程并进行一些工作比每次有新的工作请求总是创建一个新线程然后再销毁该线程要高效得多)
我的系统中可以有多个线程池(不是线程)吗?
是的
- 我一直在读,线程池中线程的一般大小应与处理器数量相同或比处理器数量大1。 处理器。
这是一个很好的启发法,但这不是必须的;您的线程池中可以有任意多个线程。人们之所以建议使用此数字,是因为如果线程池中的线程数少于物理CPU内核数,那么在高负载下,并不是所有的CPU内核都会被使用(例如,如果您有3个线程池和4个CPU核心,那么在高负载下,您将有3个CPU核心繁忙和1个CPU核心空闲/浪费,并且与在池中有4个线程的情况相比,程序将花费大约25%的时间来完成工作。另一方面,如果线程多于CPU内核,那么在繁重的负载下,“额外”线程只会使CPU内核分时共享,彼此变慢,并且在工作完成方面没有任何其他好处-速率。
但是,在任务管理器下,我的系统显示了1000多个线程 随时处于活动状态.. ??
关于那1000个线程,需要注意的事情是,在任何给定时刻,实际上有99%的线程处于睡眠状态。大多数线程并不是一直在工作。他们宁愿花费大部分时间等待某个特定事件的发生,迅速处理它,然后重新入睡,直到出现下一个事件供他们处理。这就是为什么在少数几个CPU内核上就可以有1000个线程而不会造成所有问题的原因。