回到简体

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,8 +1,8 @@
### 9.8.3. GOMAXPROCS
Go的調度器使用了一叫做GOMAXPROCS的變量來決定會有多少操作繫統的線程同時執行Go的代。其默的值是運行機器上的CPU的核心,所以在一有8核心的器上時,調度器一次在8OS程上去調度GO代。(GOMAXPROCS是前面的m:n調度中的n)。在休眠中的或者在通信中被阻塞的goroutine是不需要一個對應的線程來做調度的。在I/O中或繫統調用中或調用非Go言函數時,是需要一個對應的操作繫統線程的但是GOMAXPROCS不需要將這幾種情況計數在內
Go的度器使用了一叫做GOMAXPROCS的变量来决定会有多少操作系统的线程同时执行Go的代。其默的值是运行机器上的CPU的核心,所以在一有8核心的器上时,调度器一次在8OS线程上去度GO代。(GOMAXPROCS是前面的m:n度中的n)。在休眠中的或者在通信中被阻塞的goroutine是不需要一个对应的线程来做调度的。在I/O中或系统调用中或用非Go言函数时,是需要一个对应的操作系统线程的但是GOMAXPROCS不需要将这几种情况计数在内
你可以用GOMAXPROCS的環境變量呂顯式地控製這個參數,或者也可以在運行時用runtime.GOMAXPROCS函數來脩改它。我在下面的小程序中看到GOMAXPROCS的效果這個程序會無限打印0和1。
你可以用GOMAXPROCS的环境变量吕显式地控制这个参数,或者也可以在运行时用runtime.GOMAXPROCS函数来修改它。我在下面的小程序中看到GOMAXPROCS的效果这个程序会无限打印0和1。
```go
@@ -18,6 +18,6 @@ $ GOMAXPROCS=2 go run hacker-cliché.go
010101010101010101011001100101011010010100110...
```
在第一次執行時,最多同時隻能有一goroutine被行。初始情況下隻有main goroutine被行,所以打印很多1。了一段時間後GO調度器會將其置休眠,併喚醒另一goroutine這時候就始打印很多0了在打印的goroutine是被調度到操作繫統線程上的。在第二次執行時,我使用了兩個操作繫統線程,所以兩個goroutine可以一起被行,以同樣的頻率交替打印0和1。我們必須強調的是goroutine的調度是受很多因子影而runtime也是在不斷地發展演的,所以里的你實際得到的果可能會因爲版本的不同而與我們運行的果有所不同。
在第一次执行时,最多同时只能有一goroutine被行。初始情况下只有main goroutine被行,所以打印很多1。了一段时间后GO度器会将其置休眠,并唤醒另一goroutine这时候就始打印很多0了在打印的goroutine是被度到操作系统线程上的。在第二次执行时,我使用了两个操作系统线程,所以两个goroutine可以一起被行,以同样的频率交替打印0和1。我们必须强调的是goroutine的度是受很多因子影而runtime也是在不断地发展演的,所以里的你实际得到的果可能会因为版本的不同而与我们运行的果有所不同。
練習9.6: 測試一下算密集型的併發程序(練習8.5那的)被GOMAXPROCS怎樣影響到。在你的電腦上最佳的值是多少?你的電腦CPU有多少核心?
练习9.6: 测试一下算密集型的并发程序(练习8.5那的)被GOMAXPROCS怎样影响到。在你的电脑上最佳的值是多少?你的电脑CPU有多少核心?