# 1、开进程的开销远大于开线程
# 2、同一进程内的多个线程共享该进程的地址空间
# 3、查看pid
1.开进程的开销远大于开线程 看以下实例
import time from threading import Thread from multiprocessing import Process def running(name): print('%s running' %name) time.sleep(2) print('%s running end' %name) if __name__ == '__main__': p1=Process(target=running,args=('cmz',)) p1.start() # t1=Thread(target=running,args=('cmz',)) # t1.start() print('主线程')
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
主线程
cmz running
cmz running end
可以见在打印主线程代最后一行代码的时候,进程还没执行,p1.start ()将开启进程的信号发给操作系统后,操作系统要申请内存空间,让好拷贝父进程地址空间到子进程,开销远大于线程
import time from threading import Thread from multiprocessing import Process def running(name): print('%s running' %name) time.sleep(2) print('%s running end' %name) if __name__ == '__main__': # p1=Process(target=running,args=('cmz',)) # p1.start() t1=Thread(target=running,args=('cmz',)) t1.start() print('主线程')
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
cmz running
主线程
cmz running end
线程启动后直接打印,因为没有资源的申请。所以比进程要快。
# 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)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
主线程 100
因为是进程之间是隔离的。所以是隔离的,子进程肯定也改了自己空间的n的值
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)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
主线程 0
因为同一个进程下的多个线程是共享数据的。
# 3、查看pid
from threading import Thread from multiprocessing import Process,current_process import os def task(): # print(current_process().pid) print('子进程PID:%s 父进程的PID:%s' %(os.getpid(),os.getppid())) if __name__ == '__main__': p1=Process(target=task,) p1.start() print('主线程',current_process().pid) print('主线程',os.getpid())
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
主线程 4988 主线程 4988 子进程PID:7608 父进程的PID:4988
from threading import Thread import os def task(): print('子线程:%s' %(os.getpid())) if __name__ == '__main__': t1=Thread(target=task,) t1.start() print('主线程',os.getpid())
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
子线程:948
主线程 948
子线程和主线程同属于一个主进程,