V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
rachelross
V2EX  ›  Go 编程语言

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

  •  
  •   rachelross · 2019-01-04 22:18:58 +08:00 · 3697 次点击
    这是一个创建于 2152 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    24 条回复    2019-01-22 15:00:05 +08:00
    feiyuanqiu
        1
    feiyuanqiu  
       2019-01-04 22:24:08 +08:00 via Android   ❤️ 1
    语文课还是很重要的
    loading
        2
    loading  
       2019-01-04 22:25:39 +08:00 via Android
    那本是我买了最后悔的书。
    orangeade
        3
    orangeade  
       2019-01-04 22:26:03 +08:00 via Android   ❤️ 1
    go 语言特性又不复杂,学习路径:优先官方文档和教程,然后看开源项目和英文书籍
    weyou
        4
    weyou  
       2019-01-04 22:28:24 +08:00 via Android   ❤️ 3
    先把气氛和气愤弄清楚再吐槽并发和并行吧
    nekoyaki
        5
    nekoyaki  
       2019-01-04 22:28:41 +08:00
    ……不知道你说的原文是什么,不过落到具体的 goroutine 机制上,多个 gorotine 具有并发能力,在多核服务器上也是能够实现并行的。
    要么你贴原文出来看看?
    shiny
        6
    shiny  
       2019-01-04 22:29:24 +08:00
    一个句号也没有,服气服气。
    rachelross
        7
    rachelross  
    OP
       2019-01-04 22:29:55 +08:00
    @orangeade 嗯嗯, 多谢指点
    rachelross
        8
    rachelross  
    OP
       2019-01-04 22:31:43 +08:00
    @nekoyaki 原文如下: goroutine 是 Go 并行设计的核心。goroutine 说到底其实就是协程,但是它比线程更小,十几个 goroutine 可能体现在底层就是五六个线程,Go 语言内部帮你实现了这些 goroutine 之间的内存共享。执行 goroutine 只需极少的栈内存(大概是 4~5KB),当然会根据相应的数据伸缩。也正因为如此,可同时运行成千上万个并发任务。goroutine 比 thread 更易用、更高效、更轻便。
    nekoyaki
        9
    nekoyaki  
       2019-01-04 22:36:03 +08:00
    @rachelross
    ……我觉得他这句话说得没问题
    wph95
        10
    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
        11
    lxml  
       2019-01-04 22:44:32 +08:00
    @rachelross 成千上万个并发任务,好像没啥问题啊,成千上万个并行怎么可能才几个线程。
    wph95
        12
    wph95  
       2019-01-04 22:44:38 +08:00
    上面可能说的武断了,凭记忆这么说应该没毛病
    得去复习一下
    rachelross
        13
    rachelross  
    OP
       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
        14
    cz000  
       2019-01-04 22:57:33 +08:00
    原文说的没问题啊,多核就是并行,go 就是为了多核处理设计的。上万个并发任务也没问题啊。
    misaka19000
        15
    misaka19000  
       2019-01-04 23:04:15 +08:00
    并发还是并行看你的 CPU 有多少个核,只能说作者说的不严谨,但觉得不是错误的
    goophy
        16
    goophy  
       2019-01-04 23:33:45 +08:00 via iPhone
    理解概念,中英双读,学编程语言不能去咬文嚼字
    junjieyuanxiling
        17
    junjieyuanxiling  
       2019-01-04 23:33:54 +08:00
    https://zh.wikipedia.org/wiki/%E6%A8%A1%E5%9D%97:CGroup/IT#C

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

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

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


    // 反正感觉也是牵强
    loveCoding
        21
    loveCoding  
       2019-01-04 23:51:39 +08:00
    一句话的事情你扯那么,分下段落也好啊
    wweir
        22
    wweir  
       2019-01-05 07:47:58 +08:00 via Android
    本来就是为并行设计的,这一块在设计、宣传的时候,一直是拿 C/C++ 做对比的,因为在 C/C++ 写一个安全的并行程序比 Go 中困难很多。
    高并发只是 goroutine 这种实现方式所附带的特性。就业界普遍观点而言,真正追求极致并发能力的场景,简单使用 goroutine 并不是合适的方案
    reus
        23
    reus  
       2019-01-07 08:46:47 +08:00
    别看,垃圾书
    KgM4gLtF0shViDH3
        24
    KgM4gLtF0shViDH3  
       2019-01-22 15:00:05 +08:00
    Go is the name of the language.
    golang.org is the name of the Website.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2421 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 47ms · UTC 16:01 · PVG 00:01 · LAX 08:01 · JFK 11:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.