PRF:20140607 Five things that make Go fast.md

@houbaron 恭喜您,完成了第一篇翻译贡献!
This commit is contained in:
Xingyu.Wang 2018-10-11 15:07:14 +08:00
parent 7558481ea2
commit a663fa06ab

View File

@ -1,11 +1,10 @@
五种加速 Go 的特性
============================================================
========
_Anthony Starks 使用他出色的 Deck 演示工具重构了我原来的基于 Google Slides 的幻灯片。你可以在他的博客上查看他重构后的幻灯片, [mindchunk.blogspot.com.au/2014/06/remixing-with-deck][5]._
_Anthony Starks 使用他出色的 Deck 演示工具重构了我原来的基于 Google Slides 的幻灯片。你可以在他的博客上查看他重构后的幻灯片,
[mindchunk.blogspot.com.au/2014/06/remixing-with-deck][5]。_
* * *
我最近被邀请在 Gocon 发表演讲,这是一个每半年在日本东京举行的精彩 Go 的大会。[Gocon 2014][6] 是一个完全由社区驱动的为期一天的活动,由培训和一整个下午的围绕着 <q style="border: 0px; vertical-align: baseline; quotes: none;">生产环境中的 Go</q> 这个主题的演讲组成.
我最近被邀请在 Gocon 发表演讲,这是一个每半年在日本东京举行的 Go 的精彩大会。[Gocon 2014][6] 是一个完全由社区驱动的为期一天的活动,由培训和一整个下午的围绕着生产环境中的 Go</q> 这个主题的演讲组成.LCTT 译注:本文发表于 2014 年)
以下是我的讲义。原文的结构能让我缓慢而清晰的演讲,因此我已经编辑了它使其更可读。
@ -20,6 +19,7 @@
我很高兴今天能来到 Gocon。我想参加这个会议已经两年了我很感谢主办方能提供给我向你们演讲的机会。
[![Gocon 2014](https://dave.cheney.net/wp-content/uploads/2014/06/Gocon-2014-1.jpg)][9]
我想以一个问题开始我的演讲。
为什么选择 Go
@ -27,6 +27,7 @@
当大家讨论学习或在生产环境中使用 Go 的原因时,答案不一而足,但因为以下三个原因的最多。
[![Gocon 2014 ](https://dave.cheney.net/wp-content/uploads/2014/06/Gocon-2014-2.jpg)][10]
这就是 TOP3 的原因。
第一,并发。
@ -91,7 +92,7 @@ Python 使用额外的内存来跟踪类型信息,进行 <ruby>引用计数<rt
自 1960 年代后期以来CPU 设计师已经意识到了这个问题。
他们的解决方案是一个缓存,一个更小更快的内存区域,介入 CPU 和主存之间。
他们的解决方案是一个缓存,一个更小更快的内存区域,介入 CPU 和主存之间。
[![Gocon 2014 (12)](https://dave.cheney.net/wp-content/uploads/2014/06/Gocon-2014-12.jpg)][20]
@ -173,7 +174,7 @@ Go 实现非常简单。编译包时,会标记任何适合内联的小函数
在这个例子中,尽管函数 `Test` 总是返回 `false`,但 `Expensive` 在不执行它的情况下无法知道结果。
`Test` 被内联时,我们得到这样的东西
`Test` 被内联时,我们得到这样的东西
[![Gocon 2014 (22)](https://dave.cheney.net/wp-content/uploads/2014/06/Gocon-2014-22.jpg)][30]
@ -235,9 +236,9 @@ Go 编译器可以跨文件甚至跨包自动内联函数。还包括从标准
[![Gocon 2014 (30)](https://dave.cheney.net/wp-content/uploads/2014/06/Gocon-2014-30.jpg)][37]
Go 有 goroutines。 这是 Go 并发的基石。
Go 有 goroutine。 这是 Go 并发的基石。
我想退一步,探索 goroutines 的历史。
我想退一步,探索 goroutine 的历史。
最初,计算机一次运行一个进程。在 60 年代,多进程或 <ruby>分时<rt>Time Sharing</rt></ruby> 的想法变得流行起来。
@ -269,9 +270,9 @@ Go 有 goroutines。 这是 Go 并发的基石。
[![Gocon 2014 (33)](https://dave.cheney.net/wp-content/uploads/2014/06/Gocon-2014-33.jpg)][41]
Goroutines 升华了线程的思想。
Goroutine 升华了线程的思想。
Goroutines<ruby>协作式调度<rt>Cooperative Scheduled
Goroutine 是 <ruby>协作式调度<rt>Cooperative Scheduled
</rt></ruby>的,而不是依靠内核来调度。
当对 Go <ruby>运行时调度器<rt>Runtime Scheduler</rt></ruby> 进行显式调用时goroutine 之间的切换仅发生在明确定义的点上。
@ -282,14 +283,11 @@ Goroutines 是 <ruby>协作式调度<rt>Cooperative Scheduled
虽然 goroutine 是协作式调度的,但运行时会为你处理。
Goroutines 可能会给禅让给其他协程时刻是:
Goroutine 可能会给禅让给其他协程时刻是:
* 阻塞式通道发送和接收。
* Go 声明,虽然不能保证会立即调度新的 goroutine。
* 文件和网络操作式的阻塞式系统调用。
* 在被垃圾回收循环停止后。
[![Gocon 2014 (35)](https://dave.cheney.net/wp-content/uploads/2014/06/Gocon-2014-35.jpg)][43]
@ -407,11 +405,8 @@ Go 编译器不使用保护页,而是在每个函数调用时插入一个检
### 相关文章:
1. [听我在 OSCON 上关于 Go 性能的演讲][1]
2. [为什么 Goroutine 的栈是无限大的?][2]
3. [Go 的运行时环境变量的旋风之旅][3]
4. [没有事件循环的性能][4]
--------------------------------------------------------------------------------
@ -433,7 +428,7 @@ via: https://dave.cheney.net/2014/06/07/five-things-that-make-go-fast
作者:[Dave Cheney][a]
译者:[houbaron](https://github.com/houbaron)
校对:[校对者ID](https://github.com/校对者ID)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出