Browse Source

更新链接、修正全角括号 (#281)

* Update 07.3.md

* Update 07.3.md

* Update 07.6.md

* fix few problems

* Update 10.6 and 10.8

* Update 11.6 and 11.7

* fix some problems before Chap13

* add a dot

* Update 13.9

* little improve
王耀 2 years ago
parent
commit
86b9d6f7ef
3 changed files with 11 additions and 11 deletions
  1. 7 7
      eBook/13.10.md
  2. 2 2
      eBook/14.1.md
  3. 2 2
      eBook/14.2.md

+ 7 - 7
eBook/13.10.md

@@ -6,7 +6,7 @@
6 6
 
7 7
 ```sh
8 8
 #!/bin/sh
9
-/usr/bin/time -f ‘%Uu %Ss %er %MkB %C’ “$@”
9
+/usr/bin/time -f '%Uu %Ss %er %MkB %C' "$@"
10 10
 ```
11 11
 
12 12
 在 Unix 命令行中像这样使用 ```xtime goprogexec```,这里的 progexec 是一个 Go 可执行程序,这句命令行输出类似:56.63u 0.26s 56.92r 1642640kB progexec,分别对应用户时间,系统时间,实际时间和最大内存占用。
@@ -24,11 +24,11 @@
24 24
 你可以在单机程序 progexec 中引入 runtime/pprof 包;这个包以 pprof 可视化工具需要的格式写入运行时报告数据。对于 CPU 性能分析来说你需要添加一些代码:
25 25
 
26 26
 ```go
27
-var cpuprofile = flag.String(“cpuprofile”, “”, “write cpu profile to file”)
27
+var cpuprofile = flag.String("cpuprofile", "", "write cpu profile to file")
28 28
 
29 29
 func main() {
30 30
 	flag.Parse()
31
-	if *cpuprofile != “” {
31
+	if *cpuprofile != "" {
32 32
 		f, err := os.Create(*cpuprofile)
33 33
 		if err != nil {
34 34
 			log.Fatal(err)
@@ -45,7 +45,7 @@ func main() {
45 45
 
46 46
 然后可以像这样用 gopprof 工具:```gopprof progexec progexec.prof```
47 47
 
48
-gopprof 程序是 Google pprofC++ 分析器的一个轻微变种;关于此工具更多的信息,参见[http://code.google.com/p/google-perftools/](http://code.google.com/p/google-perftools/)。
48
+gopprof 程序是 Google pprofC++ 分析器的一个轻微变种;关于此工具更多的信息,参见[https://github.com/gperftools/gperftools](https://github.com/gperftools/gperftools)。
49 49
 
50 50
 如果开启了 CPU 性能分析,Go 程序会以大约每秒 100 次的频率阻塞,并记录当前执行的 goroutine 栈上的程序计数器样本。
51 51
 
@@ -78,11 +78,11 @@ Total: 3099 samples
78 78
 为了做到这一点必须在合适的地方添加下面的代码:
79 79
 
80 80
 ```go
81
-var memprofile = flag.String(“memprofile”, “”, “write memory profile to this file”)
81
+var memprofile = flag.String("memprofile", "", "write memory profile to this file")
82 82
 ...
83 83
 
84 84
 CallToFunctionWhichAllocatesLotsOfMemory()
85
-if *memprofile != “” {
85
+if *memprofile != "" {
86 86
 	f, err := os.Create(*memprofile)
87 87
 	if err != nil {
88 88
 		log.Fatal(err)
@@ -117,7 +117,7 @@ gopprof --inuse_objects progexec progexec.mprof
117 117
 对于 web 应用来说,有标准的 HTTP 接口可以分析数据。在 HTTP 服务中添加
118 118
 
119 119
 ```go
120
-import _ “http/pprof”
120
+import _ "http/pprof"
121 121
 ```
122 122
 
123 123
 会为 /debug/pprof/ 下的一些 URL 安装处理器。然后你可以用一个唯一的参数——你服务中的分析数据的 URL 来执行 gopprof 命令——它会下载并执行在线分析。

File diff suppressed because it is too large
+ 2 - 2
eBook/14.1.md


+ 2 - 2
eBook/14.2.md

@@ -326,7 +326,7 @@ for i := 0; i < N; i++ { <-sem }
326 326
 
327 327
 ## 14.2.8 实现并行的 for 循环
328 328
 
329
-在上一部分章节 [14.2.7](14.2.7.md) 的代码片段中:for 循环的每一个迭代是并行完成的:
329
+在上一部分章节 [14.2.7](14.2.md#1427-信号量模式) 的代码片段中:for 循环的每一个迭代是并行完成的:
330 330
 
331 331
 ```go
332 332
 for i, v := range data {
@@ -486,7 +486,7 @@ func suck(ch chan int) {
486 486
 
487 487
 习惯用法:通道迭代模式
488 488
 
489
-这个模式用到了前边示例 [14.6](exercises/chapter_14/producer_consumer.go) 中的模式,通常,需要从包含了地址索引字段 items 的容器给通道填入元素。为容器的类型定义一个方法 `Iter()`,返回一个只读的通道(参见第 [14.2.8](14.2.8.md) 节)items,如下:
489
+这个模式用到了后边14.6章示例 [producer_consumer.go](exercises/chapter_14/producer_consumer.go) 的生产者-消费者模式,通常,需要从包含了地址索引字段 items 的容器给通道填入元素。为容器的类型定义一个方法 `Iter()`,返回一个只读的通道(参见第 [14.2.8](14.2.md#1428-实现并行的-for-循环) 节)items,如下:
490 490
 
491 491
 ```go
492 492
 func (c *container) Iter () <- chan items {