守護程序
守護程序也是乙個程序,可以守護著另乙個程序
乙個程序a設定為b的守護程序,當b結束時a會立刻結束自己不管任務是否執行完畢
將程序的daemon屬性設定為true時這個程序變成了守護程序,設定daemon屬性時必須在開始程序之前
程序安全
使用lock來例項化產生一把鎖,但是要保證每乙個程序訪問的都是同一把鎖
在訪問共享資源前加鎖(acquire),訪問完畢後要解鎖(release)
注意:不能多次加鎖必須在解鎖後才能再次加鎖
加鎖可以保證多個程序修改同一塊資料時,同一時間只能有乙個任務可以進行修改,即序列修改,犧牲了速度保證了資料安全
在使用鎖的時候,無可避免的會降低效率需要找到乙個最合適的地方加上鎖,鎖住的**越少效率越高
join 和 鎖
join是讓整個程序中的**全部序列,而鎖僅僅是讓部分**序列
粒度(被鎖住的**)越少效率越高
互斥鎖相互排斥對方的鎖
乙個程序在執行時另乙個程序會等待
ipc 程序間通訊
程序與程序之間記憶體是物理隔離的無法直接通訊
四種通訊方式:
1 使用乙個共享檔案,在硬碟建立乙個檔案,不同程序之間共享這個檔案
優點:交換資料量幾乎沒有限制
缺點:速度慢
2 系統開闢一塊共享記憶體,以供程序間交換資料
通過manager來開闢
優點:速度快
缺點:資料量不能太大
3 管道
優點:封裝了檔案的開啟,關閉等操作
缺點:速度慢並且是單向的,程式設計複雜度較高
4 socket
不僅可以用於遠端計算機中的程序通訊,還可以用於本地程序通訊基於記憶體,速度快
queue
佇列是乙個容器
特點:先進先出,支援程序間資料共享,自動處理了程序安全問題(加鎖)
通過put來加資料,通過get獲取資料
生產者消費者模型
將原本由乙個程序完成的事拆分為兩個,交給兩個不同的程序(生產者,消費者)來完成
由於程序間記憶體相互隔離,所以需要為兩個角色之間提高乙個共享資料的容器
生產者將生產完成的資料放入容器
消費者從容器中取出資料來處理
生產者消費者模型的優點:
1 平衡了生產者和消費者之間的能力差異,提高處理效率
2 降低雙方的耦合度
學習併發的兩個核心問題是安全性和效率
併發程式設計(2)
作用 private volatile int a 0 強制執行緒到共享記憶體中讀取資料,而不是從執行緒工作中讀取,從而使變數在多個執行緒間可見。volatile無法保證原子性,volatile是輕量級的同步,效能比synchronized強很多,但是只是保證了效能的可見性,並不能替代synchro...
併發程式設計2
2.自旋鎖 spinlock 3.訊號量 2.synchronizer.cpp中對應的slow enter 3.鎖膨脹 inflate也在synchronizer.cpp中 因此synchronized不是自旋鎖 2.什麼時候變成重量級鎖,是因為鎖膨脹,是可逆的,當乙個執行緒持有鎖,當另乙個也來獲取...
併發程式設計2
一台計算機上面執行著很多程序,那麼計算機是如何區分並管理這些程序服務端的呢?計算機會給每乙個執行的程序分配乙個pid號 如何檢視 windows電腦 進入cmd輸入tasklist即可檢視 tasklist findstr pid檢視具體的程序 mac電腦 進入終端之後輸入ps aux ps aux...