summaryrefslogtreecommitdiff
path: root/content/posts
diff options
context:
space:
mode:
authorEltrac <hi@guhub.cn>2025-11-25 23:59:10 +0800
committerEltrac <hi@guhub.cn>2025-11-25 23:59:10 +0800
commit50c996779457b736d65d15845e5ea48553bbf4ed (patch)
treebcc73dcfd56648d336415bead3057e14aaea3c3a /content/posts
parent9f91c20d6ea80aab0f92c7c4f3551883b21e4997 (diff)
docs: fix typo
Former-commit-id: 2a715f9c38299442faf7a60d1003d0bae130dcf7
Diffstat (limited to 'content/posts')
-rw-r--r--content/posts/go-philosophy.md4
1 files changed, 2 insertions, 2 deletions
diff --git a/content/posts/go-philosophy.md b/content/posts/go-philosophy.md
index f65b2a1c..5be3a40b 100644
--- a/content/posts/go-philosophy.md
+++ b/content/posts/go-philosophy.md
@@ -33,7 +33,7 @@ intChan <- 10
someVar := <- intChan
```
-严格来说,这两个线程仍然共享了 `intChan` 这个 `channel` 类型的变量,但整体上,这种写法避免了直接读写被储存在内存中的数据。在线程 A 没有传入数据时,线程 B 执行到 `<- inChan` 这一行就会自动阻塞,直到取到 `channel` 中的数据。在 `channel` 的**抽象**下,线程不再操作一块无人管理的,需要线程自觉加锁、等待用锁的数据区域,而是相互之间直接传递数据——这就是「share memory by communicating」。
+严格来说,这两个线程仍然共享了 `intChan` 这个 `channel` 类型的变量,但整体上,这种写法避免了直接读写被储存在内存中的数据。在线程 A 没有传入数据时,线程 B 执行到 `<- intChan` 这一行就会自动阻塞,直到取到 `channel` 中的数据。在 `channel` 的**抽象**下,线程不再操作一块无人管理的,需要线程自觉加锁、等待用锁的数据区域,而是相互之间直接传递数据——这就是「share memory by communicating」。
Go 语言实现并发的方式非常优雅,而 `channel` 的存在又简化了线程之间共享数据的方式,这使得用 Go 编写并发程序的体验非常舒服,这一点在接下来还会看到。
@@ -41,7 +41,7 @@ Go 语言实现并发的方式非常优雅,而 `channel` 的存在又简化了
这句话直接翻译过来是:并发不是并行。
-这其实是计算机科学的基础知识,并发(concurrency)和并行(parallelism)本来就不是一回事。一般来说,并发指的是程序在处理器上交替执行,在单核处理器上,一个进程完全占用 CPU 资源,完成计算或者用完时间片之后,其运行的上下文会被保存,然后 CPU 进行上下文切换(context switch),换上下一个要执行的进程的上下文,然后运行下一个进程。每个进程执行时都完全占用一个处理器内核,时间到了之后就让下一个进程执行,只不过进程在 CPU 上切换的速度非常快,宏观上让人感觉是在同步执行。并行指的是真正的同步执行,在多核处理器上,不同的进程在不同的处理器内核上执行,而不需要交替执行。
+这其实是计算机科学的基础知识,并发(concurrency)和并行(parallelism)本来就不是一回事。一般来说,并发指的是程序在处理器上交替执行,在单核处理器上,一个进程完全占用 CPU 资源,完成计算或者用完时间片之后,其运行所需的上下文会被保存,然后 CPU 进行上下文切换(context switch),换上下一个要执行的进程的上下文,然后运行下一个进程。每个进程执行时都完全占用一个处理器内核,时间到了之后就让下一个进程执行,只不过进程在 CPU 上切换的速度非常快,宏观上让人感觉是在同步执行。并行指的是真正的同步执行,在多核处理器上,不同的进程在不同的处理器内核上执行,而不需要交替执行。
Go 语言是跨平台的,不需要考虑硬件底层,也就是说,编程语言不关心执行程序的计算机究竟有多少个处理器核心。Go 语言强调并发并非并行的原因是,Go 把并发当作一种「编程结构」,即组织程序的方式。程序员在进行多线程编程时,应该聚焦于程序结构而非硬件底层,如果关注程序结构,就能写出更清晰、可读、可维护的多线程程序代码;而且,也不能理所应当地认为自己用了并发的结构,程序就一定是并行的。