Soft_Job 板


LINE

※ 引述《LinuxKernel (Linus Torvalds)》之铭言: : 不敢说会写,只能说略懂,以下简单分享。 : 先说觉得好的地方 : 1. 对 non-blocking 的封装 : 大家都知道在 C/C++ 底下要写出高并发性能的 server 很多细节是很麻烦的 : 你可能说写 server 不就开个 socket 搭配 fork 多麽直观 : 但现实是要达到好的性能就需要 select、epoll、kqueue 甚至 thread pool 之类的东西 : 但 non-blocking 的世界毕竟不是那麽直观 : Go 强的地方就在於他让你用很直观的 blocking 写法 : 一个 client 进来你也就像 fork 一样给他开个 goroutine : 但实际上它底层 runtime 就是用 epoll/kqueue 帮你做掉 : 也帮你做这些 lightweight thread 的 scheduling : 当然 C/C++ 的世界也有类似的 library 可以办到,像是 Boost.Fiber : 但 Go 里面用 goroutine 搭配 channel 感觉就是优雅了些 : 不过 goroutine 还是有可能踩到坑的 : 例如 goroutine 就永远卡在那边,这点可以去了解一下它 scheduling 的实作 goroutine应该说是preemptible blocking. epoll是io的部份,跟goroutine 无关。 Boost.fiber 是coroutine. 打个比喻就是win3.1的 cooperative multitasking. goroutine 是 win95 的preemptive multitasking.完全不同等级的概念。 goroutine应该是模仿Erlang的process. channel就是message passing. 简单来讲golang就是better c + gc + concurrency. goroutine 其实是golang的最重要功能。写过Multithread的人都知道, 尽量不要share memory. Lock carfully(avoid 2 locks if possible), wait as little as possible. Multithread是very HARD(tm)的,bug非常难找,真的极少人写的好。 写过Erlang的人都知道, concurrency is SIMPLE. golang也是 同样的. 为什麽goroutine is SIMPLE, multithread is HARD. 重点就是channel, (Message Passing). 只要不要share data. concurrency就简单了。 我们都知道Moore's Law is dead. 以後multi-core只会越来越多, cpu的frequency不会增加太多。Concurrency programming只会越来越重要, Erlang证明它的concurrency programming model work. Golang 是 google想办法把concurrency programming 带到大家能用的语言上来。 我觉得golang用的人会越来越多。它其实是真的c的後继语言。 大大推荐。 -补充一下--------- 除了FreeBSD的phk大神,大家的共识是1 thread per io connection is bad for performance. goroutine + event polling是很棒的组合。 golang 不是fully preemptive. function call 的地方是golang 主要的preempt point. 所以如果你有tight loop,没有function call, 需要被preempt的话请加runtime.Gosched()在中间。其实tight loop 不被preempt是对performance很好的。 比较好的解释在这。 https://github.com/golang/go/issues/11462 想了解golang scheduler请google.我的语文能力实在不是很好。 --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 36.231.146.79
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Soft_Job/M.1522809937.A.CBA.html
1F:→ dreamnook: multi thread真的很头痛 碰到表皮就不敢再深入xD 04/04 10:56
2F:→ pokman: 那rust呢? 04/04 13:13
3F:推 foodordertw: 你没讲到golang的scheduler的核心 04/04 13:50
4F:→ foodordertw: 你应该要讲的是multithread并没有解决io blocking 04/04 13:51
5F:→ foodordertw: goroutine则是原生的解决lock/io blocking 04/04 13:52
6F:推 rodion: 听起来跟python/js的async-io差不多? 04/04 14:55
7F:→ remmurds: https://github.com/ksimka/go-is-not-good/ 04/04 15:15
8F:→ remmurds: golang 所有的缺点都整理在这里了 04/04 15:16
9F:推 MineCola: 看到楼上连结里面某一条戳中笑点:un-googlable name 04/04 17:49
10F:→ ssadow: 写multi thread超好玩的 怎麽大家都不喜欢 04/04 19:46
11F:推 ssadow: 而且goroutine不就是thread pool吗 还是multi thread啊 04/04 19:53
12F:推 soheadsome: gorountine是有调教过的thread 他的stack是可以动态调 04/04 20:12
13F:→ soheadsome: 整 04/04 20:12
14F:→ soheadsome: 如果是普通thread 他的stack就跟普通function差不多 04/04 20:12
15F:→ soheadsome: 顶多多了local storage 04/04 20:12
16F:推 alex70266: 写multi thread 很好玩啊,debug 的时候就不好玩了XD 04/04 20:23
17F:推 snaketsai: goroutine会被preempt schedule ?? 04/05 06:30
18F:推 snaketsai: 刚刚看了runtime/proc.go的sysmon跟retake() ... 04/05 06:44
19F:→ snaketsai: 这作法拿来讲preemption个人觉得实在有点微妙... 04/05 06:45
※ 编辑: oopFoo (36.231.144.2), 04/05/2018 10:40:21
20F:→ badyy: 他的preempt schedule 是coopertive的 04/05 16:44
不是,而是有限定的点,如function call. 这时preempt不用save一堆data. go的design概念是清楚,简单,有效率。syntactic sugar都不要。
21F:推 PeacockLiu: 曾经用C写了multithread,debug了半个月..... 04/06 00:40
握手。写久了,才有感觉如何debug. ※ 编辑: oopFoo (59.115.100.33), 04/07/2018 20:41:00
22F:推 qmailtw: 硬体变快了,大家觉的牺牲ㄧ点效能来换工作效率 04/12 12:36
23F:推 qmailtw: 看了这麽长的文章,请问goroutine 和 coroutine 有什麽 04/12 12:39
24F:→ qmailtw: 不同? 04/12 12:39
coroutine你要自己yield 让其他function跑. gorouine会被preempt. ※ 编辑: oopFoo (61.230.104.167), 04/12/2018 21:32:34







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:BuyTogether站内搜寻

TOP