golang 並發二(調度)

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

golang 並發二(原理)

每個作業系統都有一個固定大小的棧記憶體,使用者儲存函數的局部變數。但是空能會這個固定大小顯然不太靈活。而goroutine在生命週期開始時申請一個很小的棧,與作業系統線程類似,用於儲存函數調用期間的局部變數。本質區別是它的大小不是固定的,可以按需增大和縮小。

作業系統線程由核心進行調度,每隔幾秒,cpu調用核心功能,暫停正在啟動並執行線程,並將執行資訊儲存到記憶體,之後找到下一個需要執行的線程,然後從記憶體中恢複執行資訊,最後執行線程。由於儲存了一個線程的狀態到了記憶體,並且從記憶體恢複了另一個線程的狀態,所以進行了環境切換。這是一個比較慢的過程。

go運行時包含一個自己的調度器,可以調用m個goruotine到n個作業系統線程,與作業系統線程調度不同的是,go調度器不是由時鐘來決定的,而是有特定的go語言結構觸發的。

java當中每一個線程都有一個獨特的標識,但是goroutine沒有提供可供程式員訪問的標識。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.