Python学习100天(从入门到精通系列文章)
文章目录
- Python学习100天(从入门到精通系列文章)
- 前言
- 一、线程和进程基础
- 1.1 进程与线程的区别
- 1.2 并发与并行
- 二、多线程编程实战
- 2.1 基础多线程实现
- 2.2 创建线程的三种方式
- 2.3 守护线程
- 2.4 资源竞争与锁机制
- 三、GIL问题与多进程
- 总结
前言
在前面的课程中,我们掌握了网络数据采集的基础技术。今天我们将进入一个全新的领域——Python中的并发编程。并发编程是现代软件开发的核心技能之一,能够显著提升程序性能和用户体验。我们将从基础概念开始,逐步深入到多线程、多进程的实际应用。
一、线程和进程基础
现如今,我们使用的计算机早已是多 CPU 或多核的计算机,而我们使用的操作系统基本都支持“多任务”,这使得我们可以同时运行多个程序,也可以将一个程序分解为若干个相对独立的子任务,让多个子任务“并行”或“并发”的执行,从而缩短程序的执行时间,同时也让用户获得更好的体验。因此当下,不管用什么编程语言进行开发,实现“并行”或“并发”编程已经成为了程序员的标配技能。为了讲述如何在 Python 程序中实现“并行”或“并发”,我们需要先了解两个重要的概念:进程和线程。
1.1 进程与线程的区别
我们通过操作系统运行一个程序会创建出一个或多个进程,进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动。简单的说,进程是操作系统分配存储空间的基本单位,每个进程都有自己的地址空间、数据栈以及其他用于跟踪进程执行的辅助数据;操作系统管理所有进程的执行,为它们合理的分配资源。一个进程可以通过 fork 或 spawn 的方式创建新的进程来执行其他的任务,不过新的进程也有自己独立的内存空间,因此两个进程如果要共享数据,必须通过进程间通信机制来实现,具体的方式包括管道、信号、套接字等。
一个进程还可以拥有多个执行线索,简单的说就是拥有多个可以获得 CPU 调度的执行单元,这就是