多线程是为了使得多个线程并行的工作以完成多项任务,以提高系统的效率。线程是在同一时间需要完成多项任务的时候被实现的。
好处:
·使用线程可以把占据长时间的程序中的任务放到后台去处理
程序的运行速度可能加快
在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,线程就比较有用了,在这种情况下我们可以释放一些珍贵的资源如内存占用等等。
最关键的一点,多线程可以让同一个程序的不同部分并发执行
CPU多线程同简称SMT。
SMT可通过复制处理器上的结构状态,让同一个处理器上的多个线程同步执行并共享处理器的执行资源,可最大限度地实现宽发射、乱序的超标量处理,提高处理器运算部件的利用率,缓和由于数据相关或Cache未命中带来的访问内存延时。当没有多个线程可用时,SMT处理器几乎和传统的宽发射超标量处理器一样。
线程不是越多越好,线程切换也是要开销的,当增加一个线程的时候,增加的额外开销要小于该线程能够消除的阻塞时间,这才叫物有所值。
Linux自从2.6内核开始,就会把不同的线程交给不同的核心去处理。Windows也从NT.4.0开始支持这一特性。
使用多线程要分四种情况讨论:
a.多核CPU——计算密集型任务。此时要尽量使用多线程,可以提高任务执行效率,例如加密解密,数据压缩解压缩(视频、音频、普通数据),否则只能使一个核心满载,而其他核心闲置。
b.单核CPU——计算密集型任务。此时的任务已经把CPU资源100%消耗了,就没必要也不可能使用多线程来提高计算效率了;相反,如果要做人机交互,最好还是要用多线程,避免用户没法对计算机进行操作。
c.单核CPU——IO密集型任务,使用多线程还是为了人机交互方便,
d.多核CPU——IO密集型任务,这就更不用说了,跟单核时候原因一样。
随着操作系统越来越臃肿繁复、应用软件越来越强大复杂,对CPU运算能力的要求必定越来越高。早年的单核(单线程)CPU,即使主频再高也是无法有效应对的,更何况受制程工艺限制,CPU的主频无法无节制的提升,十年前的CPU最高主频和现在主流CPU的主频相比,相差不是很大,就说明了问题。
多线程(多核心)CPU可以将庞大复杂的预算任务分解成多个,交由不同的核心(线程)并行处理,这样大大减轻了每个线程的运算负担,提升了运算效率。
就好比一个瓦匠师傅砌墙速度再快,他自己一个人砌墙的效率也是不如八个水平一般的师傅同时砌墙的总速度。
多线程处理能力强,通俗一点就是处理多个任务的时候不卡,不慢
在多任务的环境下,比如游戏多开,或者同时运行较多的软件和大型设计类软件等情况下,可以加快速度,但是需要软件支持多线程。