當前位置:商標查詢大全網 - 遊戲電競 - Golang 線程和協程的區別

Golang 線程和協程的區別

線程:

多線程是為了解決CPU利用率的問題,線程則是為了減少上下文切換時的開銷,進程和線程在Linux中沒有本質區別,最大的不同就是進程有自己獨立的內存空間,而線程是***享內存空間。

在進程切換時需要轉換內存地址空間,而線程切換沒有這個動作,所以線程切換比進程切換代價要小得多。

協程:

想要簡單,又要性能高,協程就可以達到我們的目的,它是用戶視角的壹種抽象,操作系統並沒有這個概念,主要思想是在用戶態實現調度算法,用少量線程完成大量任務的調度。

Goroutine是GO語言實現的協程,其特點是在語言層面就支持,使用起來十分方便,它的核心是MPG調度模型:M即內核線程;P即處理器,用來執行Goroutine,它維護了本地可運行隊列;G即Goroutine,代碼和數據結構;S及調度器,維護M和P的信息。