0. C++併發(併發的兩種方式)

兩種併發方式:

  1. 進程和線程的區別
    a、進程是資源分配的最小單位,線程是程序執行的最小單位(資源調度的最小單位)
    b、進程有自己的獨立地址空間,每啓動一個進程,系統就會爲它分配地址空間,建立數據表來維護代碼段、堆棧段和數據段,這種操作非常昂貴。
    而線程是共享進程中的數據的,使用相同的地址空間,因此CPU切換一個線程的花費遠比進程要小很多,同時創建一個線程的開銷也比進程要小很多。
    c、線程之間的通信更方便,同一進程下的線程共享全局變量、靜態變量等數據,而進程之間的通信需要以通信的方式(IPC)進行。不過如何處理好同步與互斥是編寫多線程程序的難點。
    d、但是多進程程序更健壯,多線程程序只要有一個線程死掉,整個進程也死掉了,而一個進程死掉並不會對另外一個進程造成影響,因爲進程有自己獨立的地址空間。
    轉自:https://www.jianshu.com/p/2dc01727be45
  2. 多進程併發
    可以將程序分成多個獨立的進程,並且在同一時刻運行。但是這些進程之間的通信通常比較複雜或者緩慢,因爲操作系統爲進程提供了一定的保護措施,避免一個進程去修改另一個進程的數據。還有一個缺點就是,運行多個進程所需要的開銷,因爲每個進程都會被分派獨立的資源,包括地址空間,資源調度等。
    但是多進程的優勢是:使用操作系統在進程間提供的保護操作和更高級別的通信機制,可以更加容易的編寫安全的併發代碼。而且可以使用遠程連接在不同的機器上運行獨立的進程,增強運算能力。
  3. 多線程併發
    多線程併發則是在單個進程中運行多個線程。線程是可以獨立運行的,並且這些線程可以共享地址空間,這極大的減少了操作系統用於數據保護的開銷。但是程序員需要保證多線程訪問到的數據具有一致性,因此,在編寫程序的時候需要針對線程通信進行大量工作。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章