进程:
进程之间不共享全局变量。
主进程结束之前需要全部子进程先结束。
如果要提前结束有两种办法:
1.守护主进程,将process.demon设置成True。
2.手动销毁子进程,在需要结束主进程时,使用terminate手动结束子进程。
线程:
1.线程执行是无序的。
2.主线程会等待子线程结束再结束。
3.线程之间共享全局变量。
4.线程之间共享全局变量可能会导致全局变量数据之间出现错误。
(1):互斥锁
(2):死锁
(3):线程同步
互斥锁:
threading模块中定义了lock函数,使用此函数可以直接生成互斥锁。
在一个互斥锁中只能有一个线程操作,如果此前已经有线程获取了锁,则这个线程会阻塞,必须等待锁释放。
优点:
保证数据安全性,确保共享数据不会出现数据错误。
缺点:
降低了计算性能,可能导致程序运行时间成本变大。使用不当可能出现死锁现象。
死锁:
其他线程一直在等待某一线程释放锁却一直无法释放导致程序所有线程阻塞。
结果:
可能导致程序停止响应,不能再处理其他任务。
进程和线程区别对比:
1.先有进程。一个进程内可以创建多个线程。
2.线程之间共享全局变量,进程之间不共享全局变量,保证线程的数据安全可以通过互斥锁或是线程同步实现。
3.进程是操作系统资源分配的基本单位,线程是cpu分配资源的基本单位。
4.线程不能够独立执行,必须依存在进程中。
5.多进程开发稳定性强于单进程多线程。
优缺点对比:
1.进程优缺点:
优点:可以用多核
缺点:资源开销大
2.线程优缺点:
优点:资源开销小
缺点:不能用多核
小结:
1.多进程资源开销大于多线程,但是更加稳定,某个进程挂掉不会影响其他进程。
2.多进程可以使用cpu多核运行,多线程可以共享全局变量。
3.线程不能单独运行,必须依附在进程中。