Multithreading 线程池中的线程数

Multithreading 线程池中的线程数,multithreading,threadpool,Multithreading,Threadpool,我有两个问题。。 1.线程和线程池有什么区别?我的系统中可以有多个线程池而不是线程。 2.我一直在读线程池中线程的一般大小应该与处理器的数量相同,或者比处理器多一个。我使用的是四核处理器,这意味着一个线程池中可以有4到5个线程。但是,在任务管理器下,我的系统显示任何时候都有1000多个线程处于活动状态 线程和线程池有什么区别? 线程是单个执行流。线程池是这些线程的一组;通常,线程池中的线程会无限期地保持活动状态,即直到程序关闭,以便在收到每个新的工作请求时,可以将其交给线程池中的下一个可用线程进

我有两个问题。。 1.线程和线程池有什么区别?我的系统中可以有多个线程池而不是线程。 2.我一直在读线程池中线程的一般大小应该与处理器的数量相同,或者比处理器多一个。我使用的是四核处理器,这意味着一个线程池中可以有4到5个线程。但是,在任务管理器下,我的系统显示任何时候都有1000多个线程处于活动状态

线程和线程池有什么区别? 线程是单个执行流。线程池是这些线程的一组;通常,线程池中的线程会无限期地保持活动状态,即直到程序关闭,以便在收到每个新的工作请求时,可以将其交给线程池中的下一个可用线程进行处理。这是有益的,因为只唤醒一个现有线程并给它一些工作要比每次新的工作请求进来时总是创建一个新线程,然后销毁线程更有效

我的系统中可以有多个线程池而不是线程

我一直在读线程池中线程的一般大小应该与处理器的数量相同,或者比处理器的数量多一个 加工机 这是一个很好的启发,但不是一个要求;线程池中可以有任意多个线程,也可以有任意少的线程。人们提出这个数字的原因是,如果线程池中的线程数少于物理CPU核心数,那么在重载情况下,并非所有CPU核心都会被使用。例如,如果您有一个3线程池和4个CPU核心,那么在重载情况下,您将有3个CPU核心忙,1个CPU核心空闲/浪费,与池中有4个线程相比,您的程序完成工作所需的时间将延长约25%。另一方面,如果线程多于CPU内核,那么在高负载下,额外的线程只会在一起共享一个CPU内核,从而降低彼此的速度,并且不会在工作完成率方面提供任何额外的好处

然而,在任务管理器下,我的系统显示了1000多个线程 随时可用

关于这1000个线程,需要注意的是,其中99%的线程在任何给定时刻都处于休眠状态。大多数线程不是一直在工作;相反,他们一生中的大部分时间都在等待某个特定事件的发生,迅速地处理它,然后继续睡觉,直到下一个事件发生,他们才能处理。这就是为什么只有少数几个CPU核上就可以有1000个线程,而不会出现任何问题

线程和线程池有什么区别? 线程是单个执行流。线程池是这些线程的一组;通常,线程池中的线程会无限期地保持活动状态,即直到程序关闭,以便在收到每个新的工作请求时,可以将其交给线程池中的下一个可用线程进行处理。这是有益的,因为只唤醒一个现有线程并给它一些工作要比每次新的工作请求进来时总是创建一个新线程,然后销毁线程更有效

我的系统中可以有多个线程池而不是线程

我一直在读线程池中线程的一般大小应该与处理器的数量相同,或者比处理器的数量多一个 加工机 这是一个很好的启发,但不是一个要求;线程池中可以有任意多个线程,也可以有任意少的线程。人们提出这个数字的原因是,如果线程池中的线程数少于物理CPU核心数,那么在重载情况下,并非所有CPU核心都会被使用。例如,如果您有一个3线程池和4个CPU核心,那么在重载情况下,您将有3个CPU核心忙,1个CPU核心空闲/浪费,与池中有4个线程相比,您的程序完成工作所需的时间将延长约25%。另一方面,如果线程多于CPU内核,那么在高负载下,额外的线程只会在一起共享一个CPU内核,从而降低彼此的速度,并且不会在工作完成率方面提供任何额外的好处

然而,在任务管理器下,我的系统显示了1000多个线程 随时可用


关于这1000个线程,需要注意的是,其中99%的线程在任何给定时刻都处于休眠状态。大多数线程不是一直在工作;相反,他们一生中的大部分时间都在等待某个特定事件的发生,迅速地处理它,然后继续睡觉,直到下一个事件发生,他们才能处理。这就是为什么只有少数几个CPU核心上就可以有1000个线程,而不会出现任何问题。

谢谢Jeremy,这很容易理解。:谢谢Jeremy,这很容易取消 倒立