- Go并發(fā)編程實戰(zhàn)
- 汪明
- 492字
- 2022-07-29 15:05:28
1.5 運行時
雖然Go程序編譯后生成的是本地可執(zhí)行代碼,但是這些可執(zhí)行代碼必須運行在Go語言的運行時(Runtime)中。Go運行時類似Java和.NET語言所用到的虛擬機,主要負責(zé)管理包括內(nèi)存分配、自動垃圾回收、棧處理、協(xié)程(Goroutine)、信道(Channel,也稱為通道)、切片(slice)、字典(map)和反射(reflect)等。Go語言的Runtime運行機制可以用圖1.12來描述。

圖1.12 Go語言的Runtime運行機制圖
圖1.12描述了Go程序、Go運行時和操作系統(tǒng)內(nèi)核之間的關(guān)系。Go運行時和用戶編譯后的代碼被Go鏈接器(Linker)靜態(tài)鏈接起來,形成一個可執(zhí)行文件。從運行的角度來說,這個Go可執(zhí)行文件由兩部分組成:一部分是用戶的代碼,另一部分就是Go運行時。
Go運行時通過接口函數(shù)調(diào)用來管理協(xié)程(Goroutine)和信道(Channel)等功能。Go用戶代碼對操作系統(tǒng)內(nèi)核API的調(diào)用會被Go運行時攔截并處理。
Go運行時的重要組成部分是協(xié)程調(diào)度器(Goroutine Scheduler)。它負責(zé)追蹤、調(diào)度每個協(xié)程運行,實際上是從應(yīng)用程序的進程(Process)所屬的線程池(Thread Pool)中分配一個線程執(zhí)行這個協(xié)程。因此,與Java虛擬機中的Java線程和操作系統(tǒng)(OS)線程映射概念類似,每個協(xié)程只有分配到一個操作系統(tǒng)線程才能運行。
注意
雖然Java或者.NET有虛擬機的概念,但是在某些方面其執(zhí)行效率不一定比Go語言低。
- DBA攻堅指南:左手Oracle,右手MySQL
- 零基礎(chǔ)PHP學(xué)習(xí)筆記
- PyTorch自動駕駛視覺感知算法實戰(zhàn)
- Python深度學(xué)習(xí)
- 精通API架構(gòu):設(shè)計、運維與演進
- Python Data Analysis(Second Edition)
- 用Python實現(xiàn)深度學(xué)習(xí)框架
- HTML5 APP開發(fā)從入門到精通(微課精編版)
- 常用工具軟件立體化教程(微課版)
- 新一代SDN:VMware NSX 網(wǎng)絡(luò)原理與實踐
- 人工智能算法(卷1):基礎(chǔ)算法
- .NET 4.0面向?qū)ο缶幊搪劊簯?yīng)用篇
- Continuous Delivery and DevOps:A Quickstart Guide Second Edition
- Isomorphic Go
- Java程序設(shè)計及應(yīng)用開發(fā)