我是一个 golang 的 超级 beginner, 今天遇到一件特别气氛的事情

2019-01-04 22:18:58 +08:00
 rachelross

我是一个 golang 的 超级 beginner, 今天遇到一件特别气氛的事情, 我在学习 goroutine, 然后, 翻书查资料, 无意中看到知乎上一片文章, 说有一本 谢孟军的 go web 编程写的特别好, 我新生好奇, 我想说 我好像刚好买了这本书, 但是这本书是新加坡作者啊, 然后我就上网搜了一下谢孟军的这本 go web 编程, 果然确有其书, 而且刚好还有在线阅读, 我就想说看看这位大神对 goroutine 的讲解, 我去, 不看还好, 一看, 我就觉得好气, 居然开篇就把 "并发" 说成是 "并行", 我这个还没入门的菜鸟都知道这是 go 作者特别强调的地方, 还特意加以区分, 就怕大家搞混了, 结果此人都已经出书了, 居然还能出这种错误, 除此之外, 书中还有些其他的概念误导, 我真的无言以对, 不知道是大神本身就不懂呢, 还是觉得出书好玩呢, 对于我们这些小白, 有多重视这些大神的作品, 结果确是这样, 这是好在我之前就对此有概念, 要是一上来就看这书呢, ...... 实在心中郁闷, 吐槽一下了

3703 次点击
所在节点    Go 编程语言
24 条回复
feiyuanqiu
2019-01-04 22:24:08 +08:00
语文课还是很重要的
loading
2019-01-04 22:25:39 +08:00
那本是我买了最后悔的书。
orangeade
2019-01-04 22:26:03 +08:00
go 语言特性又不复杂,学习路径:优先官方文档和教程,然后看开源项目和英文书籍
weyou
2019-01-04 22:28:24 +08:00
先把气氛和气愤弄清楚再吐槽并发和并行吧
nekoyaki
2019-01-04 22:28:41 +08:00
……不知道你说的原文是什么,不过落到具体的 goroutine 机制上,多个 gorotine 具有并发能力,在多核服务器上也是能够实现并行的。
要么你贴原文出来看看?
shiny
2019-01-04 22:29:24 +08:00
一个句号也没有,服气服气。
rachelross
2019-01-04 22:29:55 +08:00
@orangeade 嗯嗯, 多谢指点
rachelross
2019-01-04 22:31:43 +08:00
@nekoyaki 原文如下: goroutine 是 Go 并行设计的核心。goroutine 说到底其实就是协程,但是它比线程更小,十几个 goroutine 可能体现在底层就是五六个线程,Go 语言内部帮你实现了这些 goroutine 之间的内存共享。执行 goroutine 只需极少的栈内存(大概是 4~5KB),当然会根据相应的数据伸缩。也正因为如此,可同时运行成千上万个并发任务。goroutine 比 thread 更易用、更高效、更轻便。
nekoyaki
2019-01-04 22:36:03 +08:00
@rachelross
……我觉得他这句话说得没问题
wph95
2019-01-04 22:37:21 +08:00
Concurrency is about dealing with lots of things at once.
Parallelism is about doing lots of things at once.
-- Rob pike
Concurrency -> 并发
Parallelism -> 并行

所以说原文没毛病
lxml
2019-01-04 22:44:32 +08:00
@rachelross 成千上万个并发任务,好像没啥问题啊,成千上万个并行怎么可能才几个线程。
wph95
2019-01-04 22:44:38 +08:00
上面可能说的武断了,凭记忆这么说应该没毛病
得去复习一下 <amp-youtube data-videoid="f6kdp27TYZs" layout="responsive" width="480" height="270"></amp-youtube> 了
rachelross
2019-01-04 22:56:08 +08:00
@wph95 Concurrency is the key to designing high performance network services. Go's concurrency primitives (goroutines and channels) provide a simple and efficient means of expressing concurrent execution. 从以上官方文档中, 我理解 "goroutine 是 Go 并行设计的核心" 这句话就是错误, 至少是误导. maybe, 我还太菜了, 我实在难以理解.
cz000
2019-01-04 22:57:33 +08:00
原文说的没问题啊,多核就是并行,go 就是为了多核处理设计的。上万个并发任务也没问题啊。
misaka19000
2019-01-04 23:04:15 +08:00
并发还是并行看你的 CPU 有多少个核,只能说作者说的不严谨,但觉得不是错误的
goophy
2019-01-04 23:33:45 +08:00
理解概念,中英双读,学编程语言不能去咬文嚼字
junjieyuanxiling
2019-01-04 23:33:54 +08:00
https://zh.wikipedia.org/wiki/%E6%A8%A1%E5%9D%97:CGroup/IT#C

都别扯了,丫的地区词转换没做(好)。你们是不是看到快取也要喷一顿啊?
nekoyaki
2019-01-04 23:34:24 +08:00
@rachelross
1+1=2 是对的,1+1 !=3 也是对的,你为什么非要因为教科书上写了 1+1=2 就认为别人说 1+1 不等于 3 是错的呢……
junjieyuanxiling
2019-01-04 23:34:42 +08:00
在 #17 的链接里搜 concurrency。
wph95
2019-01-04 23:41:16 +08:00
@rachelross
<amp-youtube data-videoid="cN_DpYBzKso" layout="responsive" width="480" height="270"></amp-youtube>&t=550s 这个视频非常推荐看看

锅在 ”并行设计“ 是什么? 查不到这种说法

我的理解是 goroutines 是 golang runtime,golang scheduler 的单位,从而并行。


// 反正感觉也是牵强

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/524001

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX