实现线程池的概念是什么(在C语言中通过pthreads实现)?如何将线程分配给线程池来执行?
针对之前的回答,进行澄清:
实例化越来越多的线程导致效率低下的原因是上下文切换时间。操作系统周期性地在处理器上切换一个线程到另一个线程。这涉及将一个线程的状态保存并从内存中加载另一个线程的状态,因此每次上下文切换需要非常可观的时间N毫秒。
例如,如果您有10个线程,则上下文切换需要花费10*N毫秒。如果您有1000个线程,则需要1000*N毫秒。随着并发线程数的增加,最终上下文切换开始压倒从多线程中获得的任何效率提高。您的应用程序在最佳线程数量方面具有甜点。通过实验确定了这个甜点数字后,您可以将线程池的最大大小设置为该线程数,从而从多线程中获得最大效率。
除了anon的回答外,我想提一下还有固定线程池、可缓存的线程池和动态线程池。固定线程池中运行着固定数量的线程;可缓存的线程池可以在需要时动态增长,当没有工作可用时则会缩小;动态线程池也可以受到最大线程数和/或工作队列最大长度的限制。我认为实际上并没有针对这种情况的固定术语,而且很少会遇到使用C语言编写的非固定线程池,但至少应该知道固定线程池不是唯一的一种。