关于这个问题,你大概了解过一些概念,比如CPU密集型的任务适合使用多进程,IO密集型的任务可以使用多线程。这都只是很笼统的说法,实际上,关于何时使用多进程何时使用多线程,要考虑的因素很多。并发编程本身是一件困难的事情,在没有明确问题关键点,没有找到系统瓶颈前,贸然的使用多进程或者多线程,只会引入新的问题而不是解决问题。
在我工作的大部分时间里,很少用到多进程,这是由工作内容决定的,但学习理解多进程仍然是有必要的,虽然自己工作中用不到,但工作中所使用的其他系统和工具可能是多进程相关的,了解多进程,有助于你了解所使用的工具。
当我们提到多进程时,一定是指父进程产生了一些子进程,他们之间有着紧密的联系。父进程如何产生子进程,本教程只讲解fork这一种方式,这是linux系统的实现方式,redis将内存中的数据保存到硬盘时会fork出一个子进程来进行这个操作。
我们所熟知的nginx,实际处理请求的也是子进程,子进程的数量建议设置为CPU的核数。部署python web系统时所使用uwsgi所采用的也是多进程。
不论是多进程还是多线程,并行的关键在于如何分配任务。一定是存在大量的任务单个进程无法满足要求,我们才使用多进程进行处理,期望每个进程处理任务的一部分。既然每个子进程只处理任务的一部分,那么如何分配这些任务就成为了问题的关键。
任务的分配,最直接,最简单的办法是使用队列,python的multiprcessing模块提供了Queue,它是线程安全和进程安全的。
QQ交流群: 211426309