Concurrency(併發)是指在同一時間內處理多個任務的能力。在電腦科學中,它通常涉及到使單個電腦核心或多個核心在相同的時間段內執行多個進程或執行緒。併發的主要目的是提高程式的執行效率和回應速度,特別是在多核處理器系統上。併發並不意味著這些任務實際上是在同一時刻執行(這將是並行處理),而是在一段時間內交替執行,從宏觀上看給人一種同時進行的錯覺。
併發的意涵包括以下幾個方面:
提高資源利用率:通過允許多個任務共用處理器資源(如CPU時間),併發可以提高系統資源的利用率。
提升性能和回應速度:在多核處理器上,通過併發執行,可以顯著提高程式的運行性能和回應速度。
處理非同步事件:併發使程式能夠同時處理來自不同來源的多個非同步事件,例如使用者輸入、檔IO和網路通信等。
複雜度管理:雖然併發引入了額外的複雜度(比如需要管理資料之間的同步和避免競態條件),但它也提供了一種結構化的方式來管理分散式和多工處理的複雜性。
設計模式和框架:為了有效管理併發程式設計中的複雜性,開發了多種設計模式和框架,如Actor模型、事件迴圈、以及併發庫和框架(例如Java的Concurrency API、Python的asyncio等)。
正確性和安全性挑戰:併發程式需要仔細設計來避免鎖死、饑餓、競態條件等問題,這些都是由於不正確的資源存取控制或同步導致的。
並行與併發的區別:併發強調的是任務的處理方式,即系統如何有效地處理多工;而並行則側重於任務的執行,即同時執行多個任務。並行處理是實現併發的一種方式,特別是在具有多個處理核心的系統中。
併發程式設計是現代軟體發展中一個非常重要的概念,特別是在服務端應用、網路應用和高性能計算領域。它要求開發者具有高度的警覺性和深入理解併發控制機制,以編寫出既高效又安全的併發代碼。