多线程

多线程简介

多线程(英语:multithreading),是指从软件或许配件上成功多个线程并发口头的技术。具备多线程才干的计算机因有配件支持而能够在同一期间口头多于一个线程,进而优化全体处置性能。具备这种才干的系统包括对称多处置机、多中心处置器以及芯片级多处置(Chip-level multithreading)或同时多线程(Simultaneous multithreading)处置器。在一个程序中,这些独立运转的程序片段叫作“线程”(Thread),应用它编程的概念就叫作“多线程处置(Multithreading)”。具备多线程才干的计算机因有配件支持而能够在同一期间口头多于一个线程(台湾译作“口头绪”),进而优化全体处置性能。

多线程百科

多线程(英语:multithreading),是指从软件或许配件上成功多个线程并发口头的技术。具备多线程才干的计算机因有配件支持而能够在同一期间口头多于一个线程,进而优化全体处置性能。具备这种才干的系统包括对称多处置机、多中心处置器以及芯片级多处置(Chip-level multithreading)或同时多线程(Simultaneous multithreading)处置器。在一个程序中,这些独立运转的程序片段叫作“线程”(Thread),应用它编程的概念就叫作“多线程处置(Multithreading)”。具备多线程才干的计算机因有配件支持而能够在同一期间口头多于一个线程(台湾译作“口头绪”),进而优化全体处置性能。

配件支持

多线程配件支持的指标,即支持极速启动就绪态线程、口头态线程间的切换。为达成这个指标,须要配件成功保留、复原程序看得见的寄存器以及一些对程序口头有影响的控制寄存器(如程序计数器PC、程序形态寄存器SR)。从一个线程切换到另一个线程对配件来讲象征着保留以后线程的一组寄存器的值,并复原行将口头线程的一组寄存器的值。

新增这些性能的配件有以下长处:

线程切换能够在一个 CPU 周期内成功(有些配件甚至没有开支,上个周期在运转线程A,下个周期就已在运转线程B)。

每个线程看起来就像是独自运转的,即没有与其余线程共享配件资源。对操作系统来说,理论每个线程都被视做独占一个处置器,这样将简化系统软件的设计(尤其是关于支持多线程的操作系统)。

为了在各个线程间有效率的启动切换,每个线程须要保留自己的一组寄存器集(register set)。有些配件设计成每个处置器中心具备两组寄存器文件,以实如今多个线程间极速切换。

多线程有什么用?

这么解释疑问吧:

1。单进程复线程:一团体在一个桌子上吃菜。

2。单进程多线程:多团体在同一个桌子上一同吃菜。

3。多进程复线程:多团体每团体在自己的桌子上吃菜。

多线程的疑问是多团体同时吃一道菜的时刻容易出现争抢,例如两团体同时夹一个菜,一团体刚伸出筷子,结果伸到的时刻曾经被夹走菜了。。。此时就必定等一团体夹一口之后,在还给另外一团体夹菜,也就是说资源共享就会出现抵触争抢。

1。关于 Windows 系统来说,【开桌子】的开支很大,因此 Windows 激励大家在一个桌子上吃菜。因此 Windows 多线程学习重点是要少量面对资源争抢与同步方面的疑问。

2。关于 Linux 系统来说,【开桌子】的开支很小,因此 Linux 激励大家尽量每团体都开自己的桌子吃菜。这带来新的疑问是:坐在两张不同的桌子上,谈话不繁难。因此,Linux 下的学习重点大家要学习进程间通讯的方法。

补充:有人对这个开桌子的开支很有兴味。我把这个疑问推行说开一下。

开桌子的意思是指创立进程。开支这里关键指的是期间开支。

可以做个试验:创立一个进程,在进程中往内存写若干数据,而后读出该数据,而后分开。此环节重复 1000 次,相当于创立/销毁进程 1000 次。在我机器上的测试结果是:

UbuntuLinux:耗时 0.8 秒

Windows7:耗时 79.8 秒

两者开支大概相差一百倍。

这象征着,在 Windows 中,进程创立的开支不容漠视。换句话说就是,Windows 编程中不倡议你创立进程,假设你的程序架构须要少量创立进程,那么最好是切换到 Linux 系统。

少量创立进程的典型例子有两个,一个是 gnu autotools 工具链,用于编译很多开源代码的,他们在 Windows 下编译速度会很慢,因此软件开发人员最好是防止经常使用 Windows。另一个是主机,某些主机框架依托少量创立进程来干活,甚至是对每个用户恳求就创立一个进程,这些主机在 Windows 下运转的效率就会很差。这“或许”也是放眼全环球范畴,Linux 主机远远多于 Windows 主机的要素。

再次补充:假设你是写主机端运行的,其真实如今的网络服务模型下,开桌子的开支是可以疏忽不计的,由于如今普通盛行的是依照 CPU 中心数量开进程或许线程,开完之后在数量上不时坚持,进程与线程外部经常使用协程或许异步通讯来处置多个并发衔接,因此开进程与开线程的开支可以疏忽了。

另外一种新的开支被提上日程:中心切换开支。

现代的体系,普通 CPU 会有多个中心,而多个中心可以同时运转多个不同的线程或许进程。

当每个 CPU 中心运转一个进程的时刻,由于每个进程的资源都独立,所以 CPU 中心之间切换的时刻无需思考高低文。

当每个 CPU 中心运转一个线程的时刻,由于每个线程须要共享资源,所以这些资源必定从 CPU 的一个中心被复制到另外一个中心,才干继续运算,这占用了额外的开支。换句话说,在 CPU 为多核的状况下,多线程在性能上不如多进程。

因此,以前面向多核的主机端编程中,须要习气多进程而非多线程。

© 版权声明
评论 抢沙发
加载中~
每日一言
不怕万人阻挡,只怕自己投降
Not afraid of people blocking, I'm afraid their surrender