Go 語言初級教程之八[併發]

併發
Go的做者選擇了消息傳遞模型來做爲推薦的併發編程方法。該語言一樣支持共享內存,而後做者自有道理:
 編程

  1. 不要經過共享內存來通訊,相反,經過通訊來共享內存。


該語言提供了兩個基本的構件來支持這一範型:goroutines和channels。

Go例程
Goroutine是輕量級的並行程序執行路徑,與線程,coroutine或者進程相似。然而,它們彼此至關不一樣,所以Go做者決定給它一個新的名字並 放棄其它術語可能隱含的意義。
建立一個goroutine來運行名爲DoThis的函數十分簡單:
 併發

  1. go DoThis() // but do not wait for it to complete


匿名的函數能夠這樣使用:
 函數

  1. go func() {
     
  2.   for { /* do something forever */ }
     
  3. }() // Note that the function must be invoked


這些goroutine將會經過Go運行時而映射到適當的操做系統原語(好比,POSIX線程)。

通道類型
有了goroutine,代碼的並行執行就容易了。然而,它們之間仍然須要通信機制。Channel提供一個FIFO通訊隊列恰好能達到這一目的。
如下是使用channel的語法:
 post

  1. /* Creating a channel uses make(), not new - it was also used for map creation */
     
  2. ch := make(chan int)
     
  3. /* Sending a value blocks until the value is read */
     
  4. ch <- 4
     
  5. /* Reading a value blocks until a value is available */
     
  6. i := <-ch


舉例來講,若是咱們想要進行長時間運行的數值計算,咱們能夠這樣作:
 操作系統

閱讀全文>>線程

相關文章
相關標籤/搜索