第八章 Goroutines和Channels

併發程序指同時進行多個任務的程序,隨著硬件的發展,併發程序變得越來越重要。Web服務器會一次處理成千上萬的請求。平板電腦和手機app在渲染用戶畫面同時還會後臺執行各種計算任務和網絡請求。即使是傳統的批處理問題——讀取數據、計算、寫輸出,現在也會用併發來隱藏掉I/O的操作延遲以充分利用現代計算機設備的多個核心。計算機的性能每年都在以非線性的速度增長。

Go語言中的併發程序可以用兩種手段來實現。本章講解goroutine和channel,其支持“順序通信進程”(communicating sequential processes)或被簡稱為CSP。CSP是一種現代的併發編程模型,在這種編程模型中值會在不同的運行實例(goroutine)中傳遞,儘管大多數情況下仍然是被限制在單一實例中。第9章覆蓋更為傳統的併發模型:多線程共享內存,如果你在其它的主流語言中寫過併發程序的話可能會更熟悉一些。第9章也會深入介紹一些併發程序帶來的風險和陷阱。

儘管Go對併發的支持是眾多強力特性之一,但跟蹤調試併發程序還是很困難,在線性程序中形成的直覺往往還會使我們誤入歧途。如果這是讀者第一次接觸併發,推薦稍微多花一些時間來思考這兩個章節中的樣例。