如上所述,硬件制造商正在為處理器添加越來(lái)越多的內核以提高性能。所有數據中心都在這些處理器上運行,更重要的是,今天的應用程序使用多個(gè)微服務(wù)來(lái)維護數據庫連接,消息隊列和維護緩存。因此,開(kāi)發(fā)的軟件和編程語(yǔ)言應該可以輕松地支持并發(fā)性,并且應該能夠隨著(zhù)CPU核心數量的增加而可擴展。
但是,大多數現代編程語(yǔ)言(如Java,Python等)都來(lái)自90年代的單線(xiàn)程環(huán)境。雖然一些編程語(yǔ)言的框架在不斷地提高多核資源使用效率,例如 Java 的 Netty 等,但仍然需要開(kāi)發(fā)人員花費大量的時(shí)間和精力搞懂這些框架的運行原理后才能熟練掌握。
Go于2009年發(fā)布,當時(shí)多核處理器已經(jīng)上市。Go語(yǔ)言在多核并發(fā)上擁有原生的設計優(yōu)勢,Go語(yǔ)言從底層原生支持并發(fā),無(wú)須第三方庫、開(kāi)發(fā)者的編程技巧和開(kāi)發(fā)經(jīng)驗。
很多公司,特別是中國的互聯(lián)網(wǎng)公司,即將或者已經(jīng)完成了使用 Go 語(yǔ)言改造舊系統的過(guò)程。經(jīng)過(guò) Go 語(yǔ)言重構的系統能使用更少的硬件資源獲得更高的并發(fā)和I/O吞吐表現。充分挖掘硬件設備的潛力也滿(mǎn)足當前精細化運營(yíng)的市場(chǎng)大環(huán)境。
Go語(yǔ)言的并發(fā)是基于 goroutine 的,goroutine 類(lèi)似于線(xiàn)程,但并非線(xiàn)程??梢詫?goroutine 理解為一種虛擬線(xiàn)程。Go 語(yǔ)言運行時(shí)會(huì )參與調度 goroutine,并將 goroutine 合理地分配到每個(gè) CPU 中,最大限度地使用CPU性能。開(kāi)啟一個(gè)goroutine的消耗非常小(大約2KB的內存),你可以輕松創(chuàng )建數百萬(wàn)個(gè)goroutine。
goroutine的特點(diǎn):
goroutine具有可增長(cháng)的分段堆棧。這意味著(zhù)它們只在需要時(shí)才會(huì )使用更多內存。goroutine的啟動(dòng)時(shí)間比線(xiàn)程快。goroutine原生支持利用channel安全地進(jìn)行通信。goroutine共享數據結構時(shí)無(wú)需使用互斥鎖。聯(lián)系客服