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 --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 39.10.40.144
※ 文章网址: https://webptt.com/cn.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灯, 水草

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

TOP