從很久之前在學校到現在我們編程的時候經常都有聽說到并發編程,偶爾也會聽到說并行,但我們很多人其實都不太清除并發與并行具體的區別在哪;我們剛開始學習編程語言的時候我相信我們寫的都是串行程序,一步接著一步來,可以說這比并發程序更不容易出錯,但在性能上要遠不如并發;還有一種并發具有很強容錯性:分布式程序,分布式程序也算是并發程序,還可以具有很強的容錯性,可以分開部署; 并發與并行有著本質上的區別。 并發指程序在同一時間只能做一個操作,但是可以在不同的時間點()做多個操作; 如:人是一個多線程的物種,只有你一個人的時候你開啟多線程“一邊炒菜,一邊玩ipad”,但其實在某一時間點,人只可以做一件事,當我們翻炒菜的時候不可能還在玩iPad,當我們在玩iPad的時候不可能還能夠翻炒菜,只有我們不在翻炒的時候才能夠玩iPad,只有我們放下手中的iPad的時候才能夠翻炒,但從時間概念上看我們還是在邊炒菜邊玩iPad;這樣炒出來的菜可能不好吃,哈哈,就如并發編程一樣存在資源的競爭,這里競爭的資源是手、眼睛,在計算機里是CPU,處處存在危機,一不小心就燒焦了,哈哈! 并行指在同一個時間點可以做幾個相同的操作或幾個不相同的操作; 如:現在家有你和你女朋友兩個人,這個時候就不用你炒菜了,在你女朋友炒菜的時候你就可以嗶哩啪啦的玩iPad了,等你女朋友做好飯就你可以吃了(不是好男人);就如現在很多計算機中都有多個CPU,我們可以寫出比并發性能更高可以同時跑在多個CPU上的程序,但前提是你要有條件(多個CPU的計算機);并發不是并行,有時候并行也是并發,有時候只是并行不是并發;只有當并行從整體上看是多個任務時才也是并發,但并行只是一個任務的時候那只是并行;這個系列說的只是編程中的并發模型,可能有時候也會談到并行,但重點是并發模型;

這系列文章主要將會談論到這么幾個并發模型:線程與鎖模型、Actor模型、Go的CSP模型等;
文章首發地址:Solinxhttp://www.solinx.co/archives/175
新聞熱點
疑難解答