Soft_Job 板


LINE

基本上google當初發明golang是解決了在c使用上所遇到的問題 例如 package的管理 跨平台編譯 避免重複編譯obj 內建多個常用的編碼密碼函式庫 當然其他語言有的特色一定會納入 GC的管理 常用的的資料型態(data type,ex:array) (這些都是可以在其他語言JAVA,.NET輕易看得到) 其中讓常常寫多工的人覺得大幅提高效率的的兩個內建功能 精簡開線程(go func()) 跳過OS輕鬆開IPC(channel) 以前這些都需要其他lib(如pthread, std, etc)幫忙 golang還實現了三個實作(個人覺得最棒的實作) 1.task scheduler 2.memory management 3.http package 1.task scheduler 內建了線程管理 大大減少了系統層面的context switch(跳過timer觸發驅動) 由golang自主管理多個線程(tasks scheduling或goroutine scheduling) 更是解決了讓你寫程式的感覺是同步(sync) 但是底層運作是非同步(async) 還有lock使用過多系統效能大幅下降的問題也解決了 因為golang的lock不會真正的的鎖住線程或資源 而是把主控權交由golang內部的scheduler(不是交給kernel)做其他線程排程 所以寫golang程式語言的人在沒有深入了解底層運作也能寫出高效能的golang程式碼 這都是要歸功於golang的底層非同步運作機制 因為大多的程式編譯人員習慣思維都是同步因此還是要滿足這個思考模式 因此golang在銜接同步和非同步之間的複雜工作 (node.js的底層核心也是在做同步非同步的銜接工作,只是它是使用callback方式銜接, 而callback的寫法對於寫過driver的人是熟悉不過,這就導致就是要完整了解底層運作機制 才能寫出好的driver,因此要寫backend的node.js就增加了,要多花一點時間了解底層運作 寫出的程式才會有比較好的表現,因此nodejs不能算完全地切開同步和非同步的思維, 而後來的async/await才算是解決這問題, 但是相較於golang有lock,有go routine,有channel, nodejs task scheduling不能算是有自己真正線排程 而是像一個FIFO的task排排站 因此在這方面消耗不少記憶體,每一個待執行的callback都會消耗記憶體 當然有generator的寫法可以更進一步來解決此問題,這也是node.js的最大瓶頸 TJ大神也是看到此問題從node.js跳到golang鑽研) 都一一的自己實現解決 即便碼農大量使用goroutine和lock都可以寫出高效能程式碼 可以用同步思維寫程式但有非同步的效能我覺得這是golang最大的特色 相較於node.js的callback,JAVA NIO親民許多 2.memory management 實際上golang是會有效的自動allocate底層memory而且會避免呼叫太多次system call 由於使用了goroutine 因此開線程變得不在耗損太多記憶體 以往至少要吃 stack page, data page, code page而且都是底層系統在管理 零零總總開銷很大 又會引起系統層的memory swap 又增加系統層的執行時間 (目前golang也開放碼農可以微調page size調教效能) 另外當GC在free memory時候並不會真的把它還給系統(或kernel) 而是暫時的存放自己身上 當其他人需要時候它內部的記憶體管理可以馬上提供 所以又減少了free memory system call的呼叫 這個在處理大量連線的socket時候非常很好的優化 在application layer就優化 不用在系統層緩慢的呼叫優化(因為kernel slab也有解決同樣問題) 3.http package http package就是建立在上面的機制在加上近期導入pipeline的概念 雖然goroutine已經大幅的減少記憶體的使用量 但是golang還是不滿足 早期http package是使用暴力開go routine來解決大量連線的情況 現在引入pipeline的概念可以使得使用記憶體更少量效能更好 更是減少scheduler的工作 一樣上層編程人員感覺不到 因為golang一樣的在底層幫你完整實作並且解決又內建 JAVA還要自行導入NIO和一堆複雜的lib拼拼湊湊才能做到非同步的socket處理 還要去學習非同步的運作原理例如nio socket group一堆api 才能開始進行撰寫高效能 在golang世界裡 你完全可以不用理會這些非同步如何處理 因為底層都幫你實作好了又內建 編譯出的程式碼就是天然的非同步等級的高效能程式 這是沒再去深入底層golang的實作內容 是很難體會google在這方面付出的心血結晶 ※ 引述《deepkh (科科將)》之銘言: : 若以 C 的觀點來看 GO, 那麼我認為 GO 自動包含了下列圖書館 : libtask - 比線程更小的線程, 但卻不是線程, 所以不需要 : thread context switch 的 overhead : libevent - non-blocking socket, buffered IO : openssl - SSL, encrypt/decrypt, hash, 以往 C 裡要用這 : 些func其實是非常蛋疼的 : cross-compiling - win32, linux, armv7, aarch64 .. 而且 : 可以在任意 host 端去 compile 成其他 target 端, 若對 C 來說 : 還必須安裝 target 的 cross-compiler 然後就是不斷的 GCC : 參數調試. 只能說 C 是個磨練心志的朋友呢. 但若沒有這位磨 : 練心志的朋友, 也許也很難體會 GO 改變了什麼. : go 本身沒有 memory leak, 有 GC, 寫法很簡單, 程式語言本身 : 某種程度上像 swift 加 C. 自己感受的 GO 最大好處在於, : 1. 很省記憶體, C 以往都會 alloc 一塊比預期大的記憶體 : 當 buffer, 但 go 貌似不會把這一大塊的記憶體的縫隙給浪費掉?! : (沒有追過 go 的 code, 純屬猜測 XD) : 2. 效能大概比 C 慢, 在 java 上下 : https://tinyurl.com/pohmc4y : 3. arm 裡也可以跑 go, 一般要用 C 去完成 client/server : 並且有加解密的功能時, 一個很菜的新人我認為若沒人指 : 點到完成, 很難想像到底會卡了多少關卡. : google 確實很多實驗性質的 project, 像 GWT, GAE : 但 go 的改變, 讓 C coder 的良善與正直都回來了, 我認為 go : 應該還是會繼遇 go 下去吧 ~ : ※ 引述《a8319 (迪拉克)》之銘言: : : 最近有個機會進到一家用go的小公司 : : 也願意讓我進去學 : : go光聽就覺得很潮 所以滿吸引我的 : : 但在台灣golang是不是幾乎沒有人用啊? : : 版上好像也沒有人在徵 也沒人討論 : : 想請教看看各位 覺得go這個語言如何 : : 在台灣是否有前景 : : 或是更直接一點 是否有錢景 : : 希望比較有接觸的大大可以分享一下 : : thx --
QR Code



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 39.10.40.144
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Soft_Job/M.1502517109.A.4C8.html ※ 編輯: jsgolang (39.10.40.144), 08/12/2017 13:53:30 ※ 編輯: jsgolang (39.10.40.144), 08/12/2017 13:57:39
1F:→ hungys: 其實package管理部分也不是說做得多好就是 XD 08/12 14:05
2F:→ hungys: import path 還會出現 github.com/.../... 感覺實在不是個 08/12 14:06
3F:→ hungys: 良好的設計,目前dependency部分有各種第三方的解,不過 08/12 14:06
4F:→ hungys: 官方有打算用godep統一了 08/12 14:07
5F:→ doublescn: 我個人是把第三方用git submodule去拉,很少用 go get 08/12 14:10
6F:→ hungys: 我之前是用glide,搭配vendor用其實還行 08/12 14:16
7F:→ dreamnook: 推 08/12 14:37
8F:→ dreamnook: 不過package管理真的很擾民 08/12 14:38
9F:→ cs8425: package麻煩+1 實作上我用git submodule放特定目錄底下 08/13 10:42
10F:推 ian90911: 推 08/13 15:48
※ 編輯: jsgolang (39.8.199.169), 08/13/2017 18:44:55 ※ 編輯: jsgolang (39.12.197.90), 08/14/2017 08:18:39 ※ 編輯: jsgolang (39.12.197.90), 08/14/2017 08:30:09







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燈, 水草

請輸入看板名稱,例如:Gossiping站內搜尋

TOP