經過了前一段時間的學校的搶課刷課,尤其感覺到了多線程的重要性,在新年第一天也是我第一次寫感悟,請大家多提建議和意見。
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.無饑餓的