这种情况持续了十多年,功能越来越强大的处置惩罚器型号相继问世,工作频率比从前更高。但由于一系列问题和物理限定,这种情况很快就陷入了危机。提高实行频率意味着同时增加发热量和随之而来的能耗。显然,频率的提升很快就会达到极限。
就如许,处置惩罚器实现了创新的飞跃,在系统中引入了内核。这些内核也被称为逻辑处置惩罚器,可以在单个 CPU 中模拟多个处置惩罚器的存在,从而形成多核 CPU。实际上,多处置惩罚器盘算机可以同时并行实行不同程序的指令。因此,在本世纪初,并行编程技能应运而生,为开发人员同时实行同一程序的不同部分提供了可能。
1.3 CPU、内核、线程和历程
Windows 中的使命管理器可以及时监控各种资源的消耗情况,如 CPU、内存和 Wi-Fi 网络:
别的,使命管理器还显示了各种信息,如历程数和当前运行的线程数。右侧则列出了我们正在运行的系统的一些特征,如内核数。
假如你使用的是 Ubuntu 等 Linux 系统,则可使用top:
Linux 系统更机动、更强大,特别是由于有大量的 shell 命令,我们还可以监控与每个命令相干的全部线程。为此,我们将使用更具体的命令来监控历程:
-T选项用于表示将显示与历程相干的线程。
中央处置惩罚器(CPU Central Processing Unit)是盘算机的真正大脑,基本上是处置惩罚代码的地方。中央处置惩罚器以周期为特征,即中央处置惩罚器在处置惩罚器上实行操纵所使用的时间单位。通常,我们用每秒周期频率来表示 CPU 的功率。
CPU 内部可以有一个内核(单核 CPU)或多个内核(多核 CPU)。内核是 CPU 中的数据实行单元。每个内核可运行多个历程。历程本质上是在机器上运行的程序,并为其预留部分内存。别的,每个历程还可以反过来启动其他历程(子历程),或在其中运行一个(主线程)或多个线程。
因此,在这些情况下,我们必须考虑在每个历程(使命)中实行的各种操纵。这些使命可能包括读取文件或调用外部网络服务等内部操纵。在这种情况下,历程必须期待外部设备的相应,因此实行时间可能无法预测。这类操纵被称为 I/O 束缚。而只涉及 CPU 内部盘算的操纵则称为 CPU 绑定。
在并行编程中,当处置惩罚子使命或 CPU 绑定操纵时,使用多个历程并行实行指令可提高程序的效率。但在 I/O 绑定的情况下,我们必须采用不同的工作方式。
在这种情况下,最合适的编程方式就是并发编程,这就是线程发挥作用的地方。在历程中,我们可以创建多个线程。其中一个线程将继承处置惩罚 CPU 绑定操纵,而其他线程将处置惩罚各种 I/O 绑定操纵。当其中一个包含绑定 I/O 操纵的线程期待数据或来自外部的相应时,其他线程将继承实行其操纵。
在这种情况下,通过并发运行线程,我们可以节省实行时间: