经过了前一段时间的学校的抢课刷课,尤其感觉到了多线程的重要性,在新年第一天也是我第一次写感悟,请大家多提建议和意见。
1.并发(concuurency)与并行(parallelism)的区别
并行:即平行,几个线程同时执行
并发:一个线程依据时间片(时钟周期)有顺序的不停执行几个任务(每次可能都只执行一小部分就切换到下一任务)有个调度的过程
2.并发级别
2.1阻塞:可能发生死锁(deadlock),饥饿(starvation),活锁(livelock)
死锁:不同线程同时持有一个程序所需要的部分资源且互相等待对方线程释放资源,自己不释放 掉。
饥饿:一个或多个线程因为一些原因如优先级低,数据竞争原子操作总是失败等长时间无法得到需要的资源。
活锁:发生死锁后,所有线程全部释放资源,然后A,B线程分别持有对方资源再发死锁,如此递归下去,程序依然无法继续。
2.2非阻塞:无障碍,无锁,无等待;(发生条件由弱到强)
1.无障碍:
a.最弱的菲阻塞调度
b.自由出入临界区
c.无竞争,有限部内完成操作
d.有竞争时回滚数据
2.无锁(最常用):
a.是无障碍的
b.每次循环保证有一个线程可以胜出
while(!atomicvar.compareandset(thread1,thread1+1))
{
thread1=atomicvar.get();
}
3.无等待(并发最高级别,可让系统保持流畅):
a.无锁
b.所有线程有限步完成
c.无饥饿的