淺談Go并發之CSP并發模型、協程并發
淺談Go并發之CSP并發模型、協程并發

CSP 即通信順序進程、交談循序程序,又被譯為交換消息的循序程序(communicating sequential processes),它是一種用來描述并發性系統之間進行交互的模型。
CSP模型的最大優點是靈活。但是容易出現死鎖的情況,且未給予直接的并行支持,并行需要建立在并發的基礎之上。
在CSP模型里面,進程間需要經過一種被稱為管道來進行通信。
什么是管道,兩個并發任務不需要共享內存,而是通過建立一條點對點的管道,數據用完之后,管道立即撤銷。有了管道,不需要事先鎖,而是需要用數據時建立管道。不需要數據時就撤銷管道了。
管道與共享內存之間有很大的區別,內存共享是通過內存來共享內存,而管道是通過通信來共享內存。所以管道通信比內存共享效率要高很多。
coroutine就是協程,也稱為go程。通過管道能夠實現百萬級的并發。如果說線程是搶占式的,那么協程是協作式的。在協程里面,也是通過管道來調度的。解放線程對CPU和內存的開銷,線程是先占用CPU和內存后才調度,而協程是通過通信發送信號來調度,協程全是通過管道,由于協程的消耗比線程小很多,所以能夠實現百萬并發。
在協程中,IO操作時絕大部分時間與CPU無關,這是管道帶來的優勢,不需要長時間鎖住內存,也不需要CPU來做調度。
8G內存的電腦,用JAVA,C來做并發,差不多也就千級并發,而用GO語言,通過管道可以讓并發能力得到很大提升。
Go 任務調度
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。