make loop

This commit is contained in:
chai2010 2016-01-08 19:34:37 +08:00
parent cf47ffed24
commit ff2df64309
2 changed files with 4 additions and 4 deletions

View File

@ -1,7 +1,7 @@
### 9.8.1. 動態棧 ### 9.8.1. 動態棧
每一个OS线程都有一个固定大小的内存块(一般会是2MB)来做栈,这个栈会用来存储当前正在被调用或挂起(指在调用其它函数时)的函数的内部变量。这个固定大小的栈同时很大又很小。因为2MB的栈对于一个小小的goroutine来说是很大的内存浪费比如对于我们用到的一个只是用来WaitGroup之后关闭channel的goroutine来说。而对于go程序来说同时创建成百上千个gorutine是非常普遍的如果每一个goroutine都需要这么大的栈的话那这么多的goroutine就不太可能了。除去大小的问题之外固定大小的栈对于更复杂或者更深层次的递归函数调用来说显然是不够的。修改固定的大小可以提升空间的利用率允许创建更多的线程并且可以允许更深的递归调用不过这两者是没法同时兼备的。 每一個OS線程都有一個固定大小的內存塊(一般會是2MB)來做棧,這個棧會用來存儲當前正在被調用或掛起(指在調用其它函數時)的函數的內部變量。這個固定大小的棧同時很大又很小。因爲2MB的棧對於一個小小的goroutine來説是很大的內存浪費比如對於我們用到的一個隻是用來WaitGroup之後關閉channel的goroutine來説。而對於go程序來説同時創建成百上韆個gorutine是非常普遍的如果每一個goroutine都需要這麽大的棧的話那這麽多的goroutine就不太可能了。除去大小的問題之外固定大小的棧對於更複雜或者更深層次的遞歸函數調用來説顯然是不夠的。脩改固定的大小可以提陞空間的利用率允許創建更多的線程併且可以允許更深的遞歸調用不過這兩者是沒法同時兼備的。
相反,一个goroutine会以一个很小的栈开始其生命周期一般只需要2KB。一个goroutine的栈和操作系统线程一样会保存其活跃或挂起的函数调用的本地变量但是和OS线程不太一样的是一个goroutine的栈大小并不是固定的栈的大小会根据需要动态地伸缩。而goroutine的栈的最大值有1GB比传统的固定大小的线程栈要大得多尽管一般情况下大多goroutine都不需要这么大的栈 相反,一個goroutine會以一個很小的棧開始其生命週期一般隻需要2KB。一個goroutine的棧和操作繫統線程一樣會保存其活躍或掛起的函數調用的本地變量但是和OS線程不太一樣的是一個goroutine的棧大小併不是固定的棧的大小會根據需要動態地伸縮。而goroutine的棧的最大值有1GB比傳統的固定大小的線程棧要大得多盡管一般情況下大多goroutine都不需要這麽大的棧
练习 9.4: 创建一个流水线程序支持用channel连接任意数量的goroutine在跑爆内存之前可以创建多少流水线阶段一个变量通过整个流水线需要用多久(这个练习题翻译不是很确定。。) 練習 9.4: 創建一個流水線程序支持用channel連接任意數量的goroutine在跑爆內存之前可以創建多少流水線階段一個變量通過整個流水線需要用多久(這個練習題翻譯不是很確定。。)

View File

@ -1,6 +1,6 @@
## 9.8. Goroutines和線程 ## 9.8. Goroutines和線程
在上一章中我们说goroutine和操作系统的线程区别可以先忽略。尽管两者的区别实际上只是一个量的区别但量变会引起质变的道理同样适用于goroutine和线程。现在正是我们来区分开两者的最佳时机 在上一章中我們説goroutine和操作繫統的線程區别可以先忽略。盡管兩者的區别實際上隻是一個量的區别但量變會引起質變的道理同樣適用於goroutine和線程。現在正是我們來區分開兩者的最佳時機
{% include "./ch9-08-1.md" %} {% include "./ch9-08-1.md" %}