為什麼主流容器引擎都是用Go而不是C來寫的?

時間 2021-06-04 21:53:24

1樓:「已登出」

因為一開始用了go而已,docker本身是整合了大量的linux特性,而linux本身是c寫的,linux api也是c語言,而go是脫離libc自行實現的runtime,而且和c語言做ffi的cgo效能會有損耗。如果用c/c++/rust這類語言重寫一遍docker,效能必然會有提公升,只是沒人去搞乙個成熟的版本而已。

2樓:周偉鋒

服務化管理,意味著需要脫離系統和平台的束縛,所以採用go是比較合理的模式。但是涉及系統排程的部分還是c的,這個你可以檢視原始碼

3樓:

redhat最近實現了乙個用C寫的容器引擎crun

containers/crunWhile most of the tools used in the Linux containers ecosystem are written in Go, I believe C is a better fit for a lower level tool like a container runtime. runc, the most used implementation of the OCI runtime specs written in Go, re-execs itself and use a module written in C for setting up the environment before the container process starts.

crun aims to be also usable as a library that can be easily included in programs without requiring an external process for managing OCI containers.

目前企業用的依然是go實現的runc,而不是c實現的crun

這個東西只要熟悉原理,應該沒必要糾結具體實現,之所以現在用的都是用go寫的runc是因為docker公司最開始用的是go實現的,包括containerd也是go實現的,並且經過了這麼多年的生產驗證,基本沒啥問題

容器生態中大量的元件和系統都是基於go實現的,大部分人都是gopher,如果發現bug有大量的開發者迅速跟進,如果用C可能就沒那麼樂觀了,這也是乙個影響的方面

4樓:

我覺得是開發者的個人好噁起了決定作用,程式設計師有人喜歡有心智負擔但靈活多變在語言層面提供很多任務具的,也有人喜歡沒有心智負擔簡單直接但需要自己造輪子的,前者一般喜歡類似C++、Rust這些,後者比較喜歡C,Go趨向於C總體處於中間。

為什麼許多主流聯賽的賽季都是跨年度,而不是在乙個自然年內起始的?

大部分主流賽事所在地區都是季節分明的。夏季氣溫炎熱 對於足球運動來說對運動員身體傷害極大。夏季是各項國際大賽的高峰期,許多運動員還需要代表國家隊打足球 籃球世界盃 奧運會 洲際比賽 雖然關注F1較少,但是最起碼我還是知道F1是不跨年的 題主不問是不是,便問為什麼的毛病真該改改了。運動員也是需要休息度...

為什麼動物配種都是用雄性配種而不是雌性?

如果有100頭母牛和100頭公牛,假設壽命交配期就1年。1.選出優秀的公牛1頭,與100頭母牛交配,理想情況下,幾個月後會有100頭優秀的小牛。2.選出1頭優秀的母牛,與100頭公牛交配,幾個月後就會有一頭小牛,如果這牛的父系還是個基因不好的,沒長大就掛了,來年牛這個物種就滅絕了。植物的雄花數量都是...

為什麼都是用弦發聲,東方是箏,西方是鋼琴,而不是倒過來,這樣的樂器的產生有什麼必然原因麼

虎皮紗 鋼琴是工業化的產品,必然是從歐洲先開始。因為工業革命發生在英國。達到了這個生產力水平,才可能製作出鋼琴。鋼琴之前的其它樂器,都是手工業製品,不管東方西方。 Sirius 怎麼說呢,我對這方面沒有深入了解,我只能用我僅有的想法來強行參與一下,錯了勿噴 我覺得是有很多方面來決定的 首先弦樂是很多...