本章重点介绍python如何进行多线程编程和多进程编程。
现代计算机的CPU几乎都是多核的,有些还有多个处理器,为了利用这些额外的处理能力, 操作系统定义了线程这个低级结构。一个进程可以创建并拥有多个线程,这些线程可以共享这个进程的资源, 通过浏览器阅读本文时,浏览器已经开启了多个线程服务。
与单个线程不同,多线程由于共享进程的资源,在修改内存中的变量时,必须考虑互斥问题, python的C语言实现提供了GIL锁,这使得python与其他语言相比,并不能提供真正意义上的多线程, 但在IO密集型编程任务中,python的多线程仍然有应用价值。
关于多线程,需要了解为何多线程同时修改一个变量时需要互斥,以及多线程之间如何同步, 一般的多线程编程不会涉及这些知识点,但如果想完成进阶,成为高手,就必须在这些艰涩难懂的知识中挣扎, 直到熟练掌握,深刻理解。
基于POSIX的线程(例如Mac OS和Linux)和Windows OS之间的线程结构和API是不同的, 但python对此进行了封装,因此,在使用时,感知不到这其中的差别。
鉴于GIL锁导致python不具备真正意义上的多线程,建议使用多进程来处理并发任务。
python提供的 multiprocessing
模块可以很好的实现多进程编程,
它提供的接口与多线程模块 threading
模块十分相似。在多进程专题中,将会重点讲解使用 fork
创建子进程,
虽然可以使用 multiprocessing
轻松的写出多进程程序,但更建议认真学习使用 fork
创建子进程,
在这个过程中将学习到父子进程的关系,写时复制这个关键概念。