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/m.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