开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 7 天,点击查看活动详情
进程
- 电脑的操作系统可以在同一时间运行多个任务,例如电脑可以一边工作写代码、一边在微信上聊天摸鱼,而且同时电脑可能还在偷偷运行其他很多任务,这种同时执行多个事情的情况就叫多任务
- 电脑中的cpu一般都是多核的,cpu的一个核在同一时间只能执行一个任务,多核cpu有几个核就可以在同一时刻运行几个任务。
- 但即使在单核cpu的电脑中,我们也能同时一边敲代码一边聊天,这看起了cpu的一个核同时执行了多个任务,但其实是操作系统实现了模拟多任务的调度算法,当在cpu单核电脑中同时运行了多个任务时,实际上操作系统是让各个任务轮流交替执行,比如在微信上执行了0.001秒后立即切换到浏览器,在浏览器执行了0.001秒后再立马切回微信,由于cpu切换的速度非常快,给我们的感觉就像电脑在同一时间执行多个任务。
- 每一个在电脑中运行起来的程序就是一个进程
python创建多进程
os.fork创建多进程
- 可以通过os.fork()创建子进程,但这种方法只能在linux和unix以及mac下面使用,不能跨平台,因此一般不推荐使用该方法
multiprocessing模块创建多进程
- multiprocessing模块创建多进程更加简单,并且支持跨平台,因此一般推荐multiprocessing模块来编写多进程代码
- 如果在windows操作系统下,所有和创建多进程相关的代码,都必须放在__name__ == 'main'下面,否则会报错。
线程
-
如果进程是火车,线程就是火车的车厢,一辆火车可以有多个车厢,线程通过提高资源的使用效率从而提高系统效率。
-
在多线程开发中,生产者和消费者模式是常用的一种方法,生产者线程用于生产数据,消费者线程从生产者线程中取出数据进行消费。为了在两个线程中的数据共享,会使用全局变量,但使用全局变量会造成数据错误,因此需要使用锁保证数据的完整性,但某个消费者线程访问某个生产者线程的数据时,会在该数据加锁,让其他线程不同访问该数据,直到该生产者线程结束,释放该锁,其他线程才能访问该数据
-
在写爬虫时,使用多线程可以极大提高爬取速度,下面是我在爬取视频时使用生产者和消费者模式代码结构,提高了几十倍的视频下载速度