线程的主要目的是提高程序的运行性能。线程可以使程序更加充分地发挥系统的可用处理能力,从而提高系统的资源利用率。此外,线程还可以使程序在运行现有任务的情况下立即开始处理新的任务,从而提高系统的响应性。
对性能的思考
提升性能意味着用更少的资源做更多的事情,资源的含义很广。对于一个指定的操作,通常会缺乏某种特定的资源,例如CPU时钟周期,内存,网络带宽,IO带宽,数据库请求,磁盘空间以及其他资源。当操作性能由于某种特定的资源而收到限制时,我们通常将该操作称为资源密集型操作,例如CPU密集型、数据库密集型等。
尽管使用多个线程的目标是提升整体性能,但与单线程的方法相比,使用多个线程总会引入一些额外的性能开销。造成这些开销的操作包括:线程之间的协调(例如加锁、触发信号以及内存同步等)、增加上下文切换、线程的创建和销毁,以及线程的调度等。如果过度地使用线程,那么这些开销甚至会超过由于提高吞吐量、响应性或者计算能力所带来的性能提升。另一方面,一个并发设计很糟糕的程序,其性能甚至比实现相同功能的串行程序的性能还要差。