多元处理(英语:Multiprocessing),也译为多进程、多处理器处理、 多重处理,指在一个单一电脑系统中,使用二个或二个以上的中央处理器,以及能够将计算工作分配给这些处理器。拥有这个能力的电脑系统,也被称为是多元处理器系统(Multiprocessing system)。当系统拥有多个处理器时,在同一时间中,可能有数个程序在执行。有时候,运行并发性程序,也会被称为是多元处理。只是当使用在软件时,通常会称为多元程序(multi-programming),或多任务处理(multitasking)。多元处理主要用于指超过一个以上处理器的电脑硬件架构的计算能力。在对称多处理(Symmetric multiprocessing)架构中,每个处理器的地位都平等,拥有同样的权限可以使用系统资源。在非对称式架构中,处理器之间的地位并不平等,系统资源以不同方式来分配给特定处理器。非对称架构,可分成非对称多处理(Asymmetric multiprocessing)系统、非均匀访存模型系统、与集群多处理系统。
什么是多线程软件?
所有软件都在“进程空间”中运行。这是内存中分配给运行程序的空间。像 Windows 和 Linux 这样的现代操作系统有一个内核管理器来管理这个进程空间并为每个进程或软件片段安排时间。操作系统 (OS) 可以调度的最小进程时间单位通常称为“线程” 。通常发生的情况是一段软件在单个线程的进程空间中运行。这称为单线程应用程序。这样做的缺点是软件不能真正完成某些高级任务,或者同时处理多行逻辑(特别是如果它在磁盘上做一些非常密集的事情,加载一些大的东西,你仍然希望程序对用户输入做出反应)。特别注意(相关但不是线程思想的核心):在处理多项任务时,很多事情并不是同时发生的。这不完全正确。现代处理器(CPU 芯片)有“流水线”、预取、分支的方法,并有多个 cpu 内核来并行运行。但是,OS 调度程序实际上只是非常快速地调度东西,在不同线程之间来回切换(其中一些可能确实在 CPU 级别并行/同时发生)。较旧的操作系统使用一种称为协作多任务处理的概念。这是一个令人讨厌的情况,在这种情况下,更旧版本的 Windows(想想 Win 3.1)可能会被冻结,因为每个进程(或应用程序)都必须放弃其执行时间片以将其交给其他程序,因此它们可以继续。同样,这一切都发生得非常快,以产生一切都在同时发生的错觉。后来的操作系统开始使用今天很常见的东西,被称为抢占式多任务处理。这是一个操作系统有自己的任务调度器/管理器的系统,它控制所有内存和进程空间、线程、时间片等……程序不做决定。他们有一定的时间,仅此而已。如果他们挂起,操作系统将强制进程耗尽内存并将其关闭。
多线程应用程序允许调度多个线程。软件进程会告诉操作系统创建多个线程,因为它会做一些其他的事情,需要在自己的进程空间中运行,向其他进程报告,等等。进度条就是一个很好的经典例子。它允许您继续使用程序做事,继续工作,同时您会看到进度条正在做它的事情。这是通过一个线程处理进度条而另一个线程处理您的用户输入和更新 UI 来实现的;他们必须小心合作。多线程变得非常棘手,您必须非常小心以确保您的程序是线程安全的(例如同时访问共享数据/内存)。
Python - 使用多处理并行处理受 CPU 限制的任务
线程不适合 CPU 密集型任务,应该使用多处理。在这里,我想用基准数字来证明这一点,同时也表明在 Python 中创建多个进程与创建多个线程一样简单。