回到简体

This commit is contained in:
chai2010
2016-02-15 11:06:34 +08:00
parent 9e878f9944
commit 2b37b23285
177 changed files with 2354 additions and 2354 deletions

View File

@@ -1,17 +1,17 @@
## 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句本身迅速地完成。
当一个程序启动时,其主函数即在一个单独的goroutine中行,我叫它main goroutine。新的goroutine用go语句来创建。在法上go句是一普通的函或方法用前加上关键字go。go语句会使其句中的函在一个新创建的goroutine中行。而go句本身迅速地完成。
```go
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元素值。由于计算函使用低效的递归,所以会运行相当长时间,在此期间我们想让用户看到一个可见的标识来表明程序依然在正常行,所以做一个动画的小图标
<u><i>gopl.io/ch8/spinner</i><u>
```go
@@ -39,12 +39,12 @@ func fib(x int) int {
}
```
動畵顯示了秒之fib(45)的調用成功地返迴,併且打印果:
动画显示了秒之fib(45)的用成功地返回,并且打印果:
```
Fibonacci(45) = 1134903170
```
主函數返迴。主函數返迴時所有的goroutine都被直接打,程序退出。除了主函退出或者直接止程序之外,有其它的程方法能夠讓一個goroutine來打斷另一個的執行,但是之可以看到一方式來實現這個目的,通goroutine之的通信來讓一個goroutine求其它的goroutine併被請求的goroutine自行結束執行。
主函数返回。主函数返回时所有的goroutine都被直接打,程序退出。除了主函退出或者直接止程序之外,有其它的程方法能够让一个goroutine来打断另一个的执行,但是之可以看到一方式来实现这个目的,通goroutine之的通信来让一个goroutine求其它的goroutine并被请求的goroutine自行结束执行。
留意一下里的兩個獨立的元是如何進行組合的spinning和菲波那契的算。分别在立的函中,但兩個函數會同時執行。
留意一下里的两个独立的元是如何进行组合的spinning和菲波那契的算。分别在立的函中,但两个函数会同时执行。