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