多线程
进程和线程
进程和线程都是操作系统中关于任务调度和并发执行的核心概念。它们是操作系统为管理、执行和调度应用程序所使用的基本构建块。
进程是一个独立运行的程序实例,拥有自己的独立内存空间和系统资源。从操作系统的视角看,进程是一个执行中的程序和其状态的组合,包括程序计数器、寄存器、虚拟内存等。线程,是进程内部的一个单独的执行流程。线程在进程内共享同一地址空间和资源,但拥有自己的调用栈、程序计数器和寄存器状态。一个进程可以有多个线程。无论进程还是线程都是由操作系统来调度的。每个进程有自己的独立地址空间,但线程没有。在多核或多处理器系统中,多个线程可以不同的 CPU 内核并行执行。
简单来说:一个应用程序至少有一个进程,一个进程至少有一个线程。
我们之前编写的简单程序,都是只有一个进程一个线程的。接下来我们会讨论一下如何开启多个线程和进程。
Python 中的多线程多少有些尴尬,上文提到:“在多核或多处理器系统中,多个线程可以不同的 CPU 内核并行执行。” 是在一般情况下。但是 Python 程序却做不到这一点:Python 程序在多线程下也无法做到多 CPU 并行运行,我们会在下文讨论具体原因。虽然,不能让多 CPU 并行工作,好在多线程还可以让不同的外设读写并行运行,比如同时访问多个文件、数据库、网页等。所以在过去,Python 的多线程主要用于支持并发 I/O。但现在,Python 中有了异步 I/O,多线程连这点优势也没有了。
尽管如此,多线程作为编程语言一个极为重要的概念,仍然值得我们深入研究一下。
threading 模块
Python提供了多种方法来创建和管理多线程,其中最常见和直接的方法是使用标准库中的 threading 模块。