多线程
线程
线程指的是一条流水线,整个执行过程的总称,也是一个抽象概念
线程是CPU的最小执行单位,是具体负责执行代码的
进程是一个资源单位,其中包括了该程序进行所需的所有资源
线程的特点:
一个进程中至少包括一个线程,是由操作系统自动创建的,称之为主线程
一个进程中可以有任意数量的线程
创建线程的开销对比进程来说是小的多
同一个进程中的线程间数据是可以共享的(最主要的特点)
如何使用:使用的方式与进程一致
不同的是:创建线程的代码可以写在任何位置
主线程任务执行完毕后,进程不会立即结束,会等待所有子进程都执行完毕
在同一个进程中,所有线程都是平等的,没有子父这么一说
创建进程与创建线程的速度差距大约是一百六十倍左右
锁
线程安全也是通过锁来保证,锁的用法与进程中的一模一样
当开发一些高并发程序时,很有可能出现线程/进程安全问题
解决方案只有加锁,但是在使用锁时很有可能出现死锁问题
出现死锁的两种原因:
1.对同一把锁调用了多次acquire导致死锁问题(最low的死锁问题)
2.有多把锁,一个线程抢一把锁,要完成任务必须同时抢到所有的锁,这将导致死锁问题
如何避免:
1.能不加锁就不加
2.如果一定要加,要保证锁只有一把
信号量
可以控制同一时间,有多少线程可以并发的访问
不是用来处理线程安全问题的
守护线程
守护线程会在主线程序结束后立即结束,即使任务还没有完成
主线程会等待所有子线程全部完成后才会结束
守护线程会在所有非守护线程结束后结束


浙公网安备 33010602011771号