make loop

This commit is contained in:
chai2010
2015-12-18 14:49:31 +08:00
parent 9fde1ff772
commit f9ac065e47
106 changed files with 725 additions and 725 deletions

View File

@@ -1,8 +1,8 @@
## 8.1. Goroutines
在Go語言中每一個發的執行單元叫作一個goroutine。設想這有一個程序有兩個函數,一個函數做一些計算,另一個輸齣一些結果,假設兩個函數沒有相互之間的調用關繫。一個性的程序會先調用其中的一個函數然後再調用來一個但如果是在有兩個甚至更多個goroutine的程序中對兩個函數的調用就可以在同一時間。我們馬上就會看到這樣的一個程序。
在Go語言中每一個發的執行單元叫作一個goroutine。設想這有一個程序有兩個函數,一個函數做一些計算,另一個輸齣一些結果,假設兩個函數沒有相互之間的調用關繫。一個性的程序會先調用其中的一個函數然後再調用來一個但如果是在有兩個甚至更多個goroutine的程序中對兩個函數的調用就可以在同一時間。我們馬上就會看到這樣的一個程序。
如果你使用過操作繫統或者其它語言提供的那麽你可以簡單地把goroutine類比作一個這樣你就可以寫齣一些正確的程序了。goroutine和程的本質區會在9.8節中講。
如果你使用過操作繫統或者其它語言提供的那麽你可以簡單地把goroutine類比作一個這樣你就可以寫齣一些正確的程序了。goroutine和程的本質區會在9.8節中講。
當一個程序啟動時其主函數卽在一個單獨的goroutine中運行我們叫它main goroutine。新的goroutine會用go語句來創建。在語法上go語句是一個普通的函數或方法調用前加上關鍵字go。go語句會使其語句中的函數在一個新創建的goroutine中運行。而go語句本身會迅速地完成。
@@ -11,7 +11,7 @@ f() // call f(); wait for it to return
go f() // create a new goroutine that calls f(); don't wait
```
在下面的例子中main goroutine會計算第45個菲波那契數。由於計算函數使用了效率非常低的遞歸所以會運行相當可觀的一段時間在這期間我們想要讓用戶看到一個可見的標識來表明程序依然在正常運行所以顯示一個動的小圖標:
在下面的例子中main goroutine會計算第45個菲波那契數。由於計算函數使用了效率非常低的遞歸所以會運行相當可觀的一段時間在這期間我們想要讓用戶看到一個可見的標識來表明程序依然在正常運行所以顯示一個動的小圖標:
```go
gopl.io/ch8/spinner
@@ -40,10 +40,10 @@ func fib(x int) int {
```
顯示了幾秒之後fib(45)的調用成功地返迴,且打印結果:
顯示了幾秒之後fib(45)的調用成功地返迴,且打印結果:
Fibonacci(45) = 1134903170
然後主函數返迴。當主函數返迴時所有的goroutine都會直接打斷程序退齣。除了從主函數退齣或者直接退齣程序之外沒有其它的編程方法能夠讓一個goroutine來打斷另一個的執行但是我們之後可以看到可以通過goroutine之間的通信來讓一個goroutine請求請求其它的goroutine讓其自己結束執行。
然後主函數返迴。當主函數返迴時所有的goroutine都會直接打斷程序退齣。除了從主函數退齣或者直接退齣程序之外沒有其它的編程方法能夠讓一個goroutine來打斷另一個的執行但是我們之後可以看到可以通過goroutine之間的通信來讓一個goroutine請求請求其它的goroutine讓其自己結束執行。
註意這的兩個獨立的單元是如何進行組合的spinning和菲波那契的計算。每一個都是寫在獨立的函數中但是每一個函數都會發地執行。
註意這的兩個獨立的單元是如何進行組合的spinning和菲波那契的計算。每一個都是寫在獨立的函數中但是每一個函數都會發地執行。