官术网_书友最值得收藏!

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語言低。

主站蜘蛛池模板: 常州市| 安塞县| 和龙市| 南昌市| 东城区| 德兴市| 林甸县| 通城县| 突泉县| 通城县| 桃园县| 左权县| 雷山县| 扬中市| 罗甸县| 丘北县| 科技| 乡宁县| 建平县| 蓬莱市| 焦作市| 习水县| 合水县| 吕梁市| 明光市| 平阳县| 五指山市| 长沙县| 霍州市| 鄂州市| 土默特左旗| 南投县| 昭平县| 建湖县| 定边县| 宁国市| 堆龙德庆县| 河池市| 阿瓦提县| 郯城县| 正蓝旗|