线程与进程的区别:
1. 同一进程的线程间共享内存资源,进程间内存资源是独立的
1.1 进程:
from threading import Thread from multiprocessing import Process n=100 def task(): global n n=0 if __name__ == '__main__': p1=Process(target=task,) p1.start() p1.join() # t1=Thread(target=task,) # t1.start() # t1.join() print('主线程',n)
输出:
主线程 100
1.2 线程:
from threading import Thread from multiprocessing import Process n=100 def task(): global n n=0 if __name__ == '__main__': # p1=Process(target=task,) # p1.start() # p1.join() t1=Thread(target=task,) t1.start() t1.join() print('主线程',n)
输出:
主线程 0
2. 开进程开销大,开线程开销小
2.1 线程:
import time from threading import Thread from multiprocessing import Process def piao(name): print('%s piaoing' %name) time.sleep(2) print('%s piao end' %name) if __name__ == '__main__': # p1=Process(target=piao,args=('egon',)) # p1.start() t1=Thread(target=piao,args=('egon',)) t1.start() print('主线程') 输出: egon piaoing 主线程 egon piao end
2.2 进程
import time from threading import Thread from multiprocessing import Process def piao(name): print('%s piaoing' %name) time.sleep(2) print('%s piao end' %name) if __name__ == '__main__': p1=Process(target=piao,args=('egon',)) p1.start() # t1=Thread(target=piao,args=('egon',)) # t1.start() print('主线程') 输出: 主线程 egon piaoing egon piao end
3. 进程是资源,线程是动作
4. 每开一个子进程,都得拷贝一份资源
每开一个进程,默认有一个线程
执行角度看是主线程,资源角度看是主进程。