更新链接、修正全角括号 (#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
This commit is contained in:
王耀
2016-09-04 18:04:40 +08:00
committed by 无闻
parent f27a8d84bf
commit 86b9d6f7ef
3 changed files with 11 additions and 11 deletions

View File

@@ -10,13 +10,13 @@
**不要使用全局变量或者共享内存,它们会给你的代码在并发运算的时候带来危险。**
解决之道在于同步不同的线程,对数据加锁,这样同时就只有一个线程可以变更数据。在 Go 的标准库 `sync` 中有一些工具用来在低级别的代码中实现加锁;我们在第 [9.3](9.3.md) 节中讨论过这个问题。不过过去的软件开发经验告诉我们这会带来更高的复杂度,更容易使代码出错以及更低的性能,所以这个经典的方法明显不再适合现代多核/多处理器编程:`thread-per-connection` 模型不够有效。
解决之道在于同步不同的线程,对数据加锁,这样同时就只有一个线程可以变更数据。在 Go 的标准库 `sync` 中有一些工具用来在低级别的代码中实现加锁;我们在第 [9.3](09.3.md) 节中讨论过这个问题。不过过去的软件开发经验告诉我们这会带来更高的复杂度,更容易使代码出错以及更低的性能,所以这个经典的方法明显不再适合现代多核/多处理器编程:`thread-per-connection` 模型不够有效。
Go 更倾向于其他的方式,在诸多比较合适的范式中,有个被称作 `Communicating Sequential Processes顺序通信处理`CSP, C. Hoare 发明的)还有一个叫做 `message passing-model消息传递`(已经运用在了其他语言中,比如 Erlang
在 Go 中,应用程序并发处理的部分被称作 `goroutines协程`,它可以进行更有效的并发运算。在协程和操作系统线程之间并无一对一的关系:协程是根据一个或多个线程的可用性,映射(多路复用,执行于)在他们之上的;协程调度器在 Go 运行时很好的完成了这个工作。
协程工作在相同的地址空间中,所以共享内存的方式一定是同步的;这个可以使用 `sync` 包来实现(参见第 [9.3](9.3.md) 节不过我们很不鼓励这样做Go 使用 `channels` 来同步协程(可以参见第 [14.2](14.2.md) 节等章节)
协程工作在相同的地址空间中,所以共享内存的方式一定是同步的;这个可以使用 `sync` 包来实现(参见第 [9.3](09.3.md) 节不过我们很不鼓励这样做Go 使用 `channels` 来同步协程(可以参见第 [14.2](14.2.md) 节等章节)
当系统调用(比如等待 I/O阻塞协程时其他协程会继续在其他线程上工作。协程的设计隐藏了许多线程创建和管理方面的复杂工作。