1、概念
进程(Process)是计算机中的程序关于某数据集合上的一次运行活动;
线程(thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。在Unix System V及SunOS中也被称为轻量进程(lightweight processes),但轻量进程更多指内核线程(kernel thread),而把用户线程(user thread)称为线程。
2、使用
- 多进程
from multiprocessing import Process
import os,time
def work(times):
i=0
for i in range(times):
i+=1
if __name__ == "__main__":
cpu_num=os.cpu_count()
print('cpu个数:',cpu_num)
l = []
start = time.time()
for i in range(cpu_num): #用全部cpu同时计算,可到任务管理器看cpu利用率,接近100%
p = Process(target=work,args=(100000000,)) #创建并运行子进程
p.start()
l.append(p)
for p in l:
p.join() #等待所有子进程运行完
stop = time.time()
print("运行时间:%s"%(stop - start))
```![多进程运行时间](https://img-blog.csdnimg.cn/20191112212914569.png)![单进程运行时间](https://img-blog.csdnimg.cn/20191112213317715.PNG)
2. 多线程
from threading import Thread
import os,time
def work(times):
res = 0
for i in range(times):
res += i
if __name__ == "__main__":
cpu_num=os.cpu_count()
print('cpu个数:',cpu_num)
l = []
start = time.time()
for i in range(cpu_num): #cpu利用率并未提升,因为多线程是并发执行的,非并行,即宏观上同时执行,微观上先后执行
p = Thread(target=work,args=(100000000,)) # 多线程
p.start()
l.append(p)
for p in l:
p.join()
stop = time.time()
print("运行时间:%s"%(stop - start))
注意: 多线程运行所花的时间比单进程运行所花的时间还要长主要是因为python多线程需要用到GIL这个东西,它会获取和释放锁,具体解释可参考python多线程运行变慢, 因而需要的时间比正常单核执行的时间还要长,但多线程处理能够提高并发度。