第 34 期 Go 夜读之 plan9 汇编入门,带你打通应用和底层 by Xargin

2019.3.16 晚上 21 点 ~ 23点

直播过程中的文字讨论 (如有涉及到隐私,请告知)

21:08:32	 From xiong hekuan : 几乎没有
21:08:47	 From amatist Kurisu : 大佬开下麦...
21:09:02	 From Laily Long : 能听到
21:09:02	 From xiong hekuan : 可以
21:09:03	 From 何翔宇 : 可以
21:09:06	 From xiye : 能听到  
21:09:09	 From haoc7 : 听到了
21:09:12	 From 星星 : 挺清楚的
21:11:01	 From amatist Kurisu : ok
21:13:57	 From panda : 👍
21:15:40	 From albert’s iPhoneSE : 32位都差不多复杂
21:28:15	 From 红红火火 : 不太好理解
21:28:24	 From dongzerun : rax rbx ….. 一共六个,再多的才通过栈
21:32:09	 From 红红火火 : 每个方法都有一个zhanma
21:32:22	 From HLewis : 销毁就是sp等于bp吧
21:33:06	 From albert’s iPhoneSE : 怎么修改栈大小?
21:33:10	 From 红红火火 : 每个方法都有一个栈指针吗
21:33:19	 From Flora Wong : C++里inline函数就没有栈吧
21:33:52	 From xiaolong ran : 失效后还给操作系统它怎么处理 ?
21:34:35	 From 红红火火 : 回收再利用吧
21:37:42	 From 王耀峰 : 这是当时的值或者地址吧
21:37:49	 From amatist Kurisu : 那cpu切换任务的话, 保存的上下文是指寄存器中的值么
21:38:08	 From amatist Kurisu : ok
21:42:08	 From 王耀峰 : 问个问题啊。系统条用,还会涉及到了内核态或者用户态切换吧,汇编有体现吗
21:42:42	 From 王耀峰 : ok
21:42:45	 From xiaolong ran : .bss 和 .rodata这两个和.text和.data是怎么交互的
21:43:30	 From Laily Long : 就相当于系统调用的时候按要求把参数天刀对应寄存器,然后调用 syscall 进内核,内核就会自己拿参数然后执行对吧,返回的参数也写到固定寄存器?
21:43:32	 From dongzerun : 这哪有交互的说法
21:43:46	 From z : syscall 不属于体系架构的指令,而是操作系统提供的?
21:44:13	 From dongzerun : 其它平台有的是不叫 syscall
21:46:59	 From Laily Long : $ 表示数字?
21:47:45	 From Laily Long : plan9 是另一个操作系统的项目,不过凉了
21:54:25	 From Flora Wong : zhuji 码 是哪两个字?
21:54:30	 From daniel : 不同的assembler
21:55:08	 From atlas : 助记码
21:55:12	 From 影子的 iPhone : 助记码
21:58:46	 From 王耀峰 : 这种应该应该还有一种好处,所有栈信息都保存在协程的结构体里面,省去了好多上线文切换的开销了
22:01:58	 From Laily Long : 是不是判断了之后 jmp 到不同的地方
22:05:01	 From 卜邪 小 : SB代表什么?
22:05:45	 From Flora Wong : SB是某个寄存器?
22:06:09	 From daniel : SB: Static base pointer: global symbols.
22:06:13	 From Odyssey : 所有的外部引用都需通过伪寄存器: PC(virtual Program Counter)/SB(Static Base register)
22:06:25	 From Odyssey : 刚搜索的 :)
22:09:17	 From HLewis : 尾递归讲的好,只是有人介绍过,自己没跟过,学习了
22:13:00	 From daniel : 能否分析一个函数调用时stack的结构?
22:13:18	 From 卜邪 小 : 不会被抢占?
22:14:23	 From 王耀峰 : 那也就是说gc 没办法正常回收了
22:14:54	 From 王耀峰 : 我记得Go 里面好像有一个兜底策略
22:15:37	 From pingzheng : 那写gorouting感觉好危险
22:15:46	 From liu : 纯运算的是抢占不了
22:15:51	 From 王耀峰 : 好好
22:15:53	 From 王耀峰 : 还好
22:17:43	 From 卜邪 小 : 在听
22:18:17	 From z : SB的作用是
22:19:03	 From 王耀峰 : 一个G的栈初始化只有2k
22:19:42	 From xiye : goroutine的初始分配的内存是2k吧
22:19:59	 From 红红火火 : 4k
22:20:19	 From 王耀峰 : 这个应该和操作系统,虚拟内存有关吧
22:20:44	 From 王耀峰 : 物理不可能,虚拟的也不会
22:23:22	 From HLewis : 等一下能讲讲,所有的goroutine都在同一个操作系统进程中吗?
22:23:30	 From dingliu : 所以想到一个case,如果被调用的函数只有一个字符的变量还没超过2k,就不会触发morestack.
22:23:49	 From 红红火火 : 去看gmp
22:30:23	 From dingliu : +8是指8字节吗?
22:33:45	 From z : textflag.h是什么
22:35:55	 From Laily Long : 怎么知道 slice 在汇编里是传了三个参数进去的
22:36:05	 From Laily Long : 去哪里查,比如我要知道 map 的
22:37:13	 From Laily Long : 哦哦。。懂了。。
22:40:02	 From 王耀峰 : 后面的值是什么意思
22:40:26	 From 王耀峰 : 哈哈,我擦
22:40:41	 From 王耀峰 : 这还得算内存对齐了,哈哈
22:41:03	 From Flora Wong : 黑科技 太牛
22:43:17	 From 榴莲 : 🐂
22:43:41	 From 红红火火 : 雨痕是不是很懂这些啊
22:46:01	 From Flora Wong : 汇编有点意思 感谢大佬分享
22:46:29	 From mai yang : 👍汇编还给老师了。
22:46:33	 From xiye : defer一般用来做资源解锁比较好
22:46:37	 From HLewis : 所有的goroutine都处在同一个操作系统进程中吗?
22:46:42	 From mai yang : defer 确实很尴尬的。
22:47:25	 From 红红火火 : 线程队列里
22:47:51	 From haoc7 : 上次有人线上defer没走到,前面崩了,找了半天是defer没走到。
22:48:11	 From 王耀峰 : panic了
22:48:21	 From z : go语言问题是追的github上issue么?
22:48:33	 From mai yang : pgraph?
22:48:38	 From Xargin : pprof
22:48:40	 From mai yang : pprof
22:49:18	 From mai yang : 太感谢老师今天的分享了
22:49:21	 From 卜邪 小 : 有
22:49:23	 From 卜邪 小 : https://github.com/golang/go/blob/master/src/runtime/asm_amd64.s#L253
22:49:32	 From mai yang : 在群里面
22:49:35	 From 卜邪 小 : 老师能帮忙翻译这段汇编吗?
22:49:40	 From Feng Zhu : 谢谢大神分享
22:50:00	 From hawken : 还有一个小小的问问,chrome 插件第三个是什么插件啊😂
22:50:13	 From HLewis : 所有的goroutine都处在同一个操作系统进程中吗?
22:50:22	 From haoc7 : 哈哈哈,我刚刚也搜了
22:50:23	 From 红红火火 : jstogo
22:50:27	 From Laily Long : 请问下 Plan9 的汇编优势在哪里,为啥 go 的开发者会抛弃其他的自己造这个轮子
22:50:28	 From Flora Wong : 哈哈 你的插件看起来都很棒
22:51:00	 From mai yang : 这些插件都可以总结一波。
22:51:22	 From Flora Wong : 回头分享一下插件名称哈 大佬
22:52:02	 From 星星 : 我看到油猴了
22:52:15	 From 王耀峰 : G应该是个宏封装吧
22:52:23	 From HLewis : go协程和操作系统进程啥关系?
22:52:46	 From Flora Wong : 一个go程序执行的时候就是一个进程 肯定goroutine都在一个进程里啊
22:52:52	 From Flora Wong : 你是想问线程吧?
22:52:55	 From 王耀峰 : 可以从网上看看经典的go的 GMP
22:52:57	 From Laily Long : 这个你需要去看 gmp 模型
22:53:10	 From HLewis : 好的我先搜一下
22:55:36	 From William的 iPhone : 比较迷惑的是协程都在一个进程里面,那他怎么用满多核服务器的
22:56:18	 From 王耀峰 : 中间层?
22:56:30	 From HLewis : 对
22:56:48	 From HLewis : 系统级别只有进程
22:57:03	 From HLewis : 线程是提供的库比如pthreads
22:57:56	 From HLewis : 如果协程都在一个进程中,那么就意味着所有协程共享同一个虚拟内存空间,
22:58:37	 From HLewis : 那么操作系统提供的进程间ipc跟Go就没有毛关系了?
22:59:55	 From daniel : 比较迷惑的是协程都在一个进程里面,那他怎么用满多核服务器的
22:59:59	 From daniel : 多线程呀
23:01:03	 From 王耀峰 : 不一定是一个进程,其实G的存在就减少了上下文切换,底层还是多喝都绑定到P上相当于多核了吧
23:01:06	 From William的 iPhone : 协程之间走进程间通信吗?
23:01:54	 From William的 iPhone : 多个线程之间的goroutine 怎么通信?
23:02:08	 From 王耀峰 : channel
23:03:02	 From William的 iPhone : 说错了是多个核上的多个进程上面的goroutine 之间的通信
23:03:34	 From daniel : 啥,一个Go程序跑起来是单进程的呀
23:03:48	 From 王耀峰 : Go其实弱化了这些进程线程概念,你遵循mpg这种用就行了
23:03:51	 From wangriyu : 不同进程得走系统ipc了吧
23:04:07	 From William的 iPhone : 单进程能用满多个核心么
23:04:12	 From William的 iPhone : 迷糊了
23:04:14	 From Xargin : debug.xxxstack()
23:04:41	 From wangriyu : 进程是资源分配的基本单元,线程才是执行单元
23:04:54	 From 王耀峰 : 对
23:05:07	 From wangriyu : 你多线程跑就能跑满cpu了
23:05:08	 From daniel : 一个进程可以搞出来n个线程,这n个线程会执行m个goroutine
23:05:24	 From 王耀峰 : 在linux 下层其实进程线程好像不太严格。弱进程
23:06:39	 From daniel : 同一个进程下的线程共享很多资源
23:06:48	 From William的 iPhone : 这m个在一个核心里面?我理解的一个进程只能用满一个核心吧
23:07:04	 From tanrongxian : 峰哥牛鼻
23:07:07	 From mai yang : 非常感谢
23:07:07	 From luckybear : 多谢大佬
23:07:07	 From pingzheng : 感谢大佬
23:07:08	 From HLewis : 学习了,谢谢分享
23:07:09	 From Laily Long : 辛苦大佬
23:07:14	 From Flora Wong : 感谢 @Xargin
23:07:16	 From hawken : 非常感谢
23:07:18	 From Odyssey : 谢谢分享
23:07:18	 From wangriyu : 感谢
23:07:18	 From doujiapeng : 感谢感谢
23:07:18	 From qclaogui : 辛苦大佬
23:07:21	 From 星星 : 感谢
23:07:22	 From tanrongxian : 感谢分享
23:07:24	 From 饶全成 : 感谢
23:07:24	 From Flora Wong : 辛苦大佬
23:07:25	 From Feng Zhu : 大佬
23:07:25	 From 卜邪 小 : 谢谢
23:07:32	 From daniel : 感谢,睡觉了
23:07:33	 From amatist Kurisu : 感谢分享
23:07:34	 From doujiapeng : 多谢
23:07:36	 From haoc7 : 谢谢大佬
23:07:38	 From qclaogui : good night
23:07:41	 From Odyssey : 谢谢大佬
23:07:46	 From 鹏飞 : 6
23:07:49	 From mai yang : 晚点分享出来给大家
23:07:50	 From HLewis : gnight

观看视频