1. 程式人生 > >併發程式設計的藝術——第一章併發程式設計的挑戰

併發程式設計的藝術——第一章併發程式設計的挑戰

用併發解決的問題大體可以分為“速度”和“設計可管理性”兩種

速度

併發通常是提高執行在單處理器上的程式的效能。將程式的所有部分當做是單個任務執行開銷會變得小一點,因為可以節省上下文切換的代價,但如果程式中的某個任務因為程式控制範圍之外的某些條件而導致不能繼續執行,這是就阻塞了,但如果我們使用併發來編寫程式,當一個任務阻塞時,程式中的其他任務還可以繼續執行,因此這個程式可以繼續保持向前執行的狀態。

任務是由執行緒來驅動的。

程式一次執行的結果可能與另一次執行的結果不同,這是因為執行緒排程機是非確定性的。

如何減少上下文的切換:

  1. 無鎖併發程式設計:
  2. CAS演算法:
  3. 使用最少執行緒:避免創造不需要的執行緒
  4. 協程:在單執行緒裡實現多工的排程,在單執行緒裡維持多個任務間的切換

避免死鎖的常見方法:

  1. 避免一個執行緒獲取多個鎖
  2. 避免一個執行緒在鎖內同時佔用多個資源,儘量保證每個鎖只佔用一個資源
  3. 嘗試使用定時鎖,使用lock.tryLock(timeout)來替代使用內部鎖機制
  4. 對於資料庫鎖,加鎖和解鎖必須在一個數據庫連線裡,否則會出現解鎖失敗的情況