V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  lewis89  ›  全部回复第 10 页 / 共 83 页
回复总数  1645
1 ... 6  7  8  9  10  11  12  13  14  15 ... 83  
2021-02-05 20:18:20 +08:00
回复了 zhoudaiyu 创建的主题 Go 编程语言 有没有哪里能通俗易懂地讲明白 Go 的并发?
@lewis89 #2

还有 Linux 常见的 IO 模型 以及多路 IO 复用技术
2021-02-05 20:17:26 +08:00
回复了 zhoudaiyu 创建的主题 Go 编程语言 有没有哪里能通俗易懂地讲明白 Go 的并发?
没有什么办法可以让你通俗易懂,真的,能写 go 调度器的人 至少得会以下几个技能

各平台的汇编以及栈幁结构(不然你真不知道协程调度是如何完成上下文切换的 以及如何实现动态栈伸缩)
操作系统信号机制 (不然你真的不知道如何实现抢断式调度)
monitor 锁 (不然你真的不知道多线程如何通信 如何同步)
调度算法 (不然你真的不知道如何调度)

建议还是老老实实先读 CSAPP 现代操作系统原理 这两本书
2021-02-05 20:12:55 +08:00
回复了 Dongxiem 创建的主题 Go 编程语言 几个关于 Go Runtime 的问题
@byte10 #45 另外后面的版本,即使你写了个死循环,现在 go 调度器也可以基于信号机制来实现抢占调度了
2021-02-05 20:01:55 +08:00
回复了 Dongxiem 创建的主题 Go 编程语言 几个关于 Go Runtime 的问题
@qieqie #47 可能你有一个更好的对 runtime 的解释,愿听其详吧..
2021-02-05 19:49:55 +08:00
回复了 Dongxiem 创建的主题 Go 编程语言 几个关于 Go Runtime 的问题
@qieqie #47

i 就 i 了吧,每个人对 runtime 这个概念理解完全不一样,但是我们一般网上交流 runtime 无非是讨论 程序语言编译后的二进制文件在运行时提供的方方面面的功能,例如 程序的栈幁 调度模式(抢占 /非抢占) 调度单位 调度策略 内存回收策略 变量的生命周期 语言元信息的反射功能, 这都算作语言的 runtime,我不知道你所说的 runtime 是什么 runtime
2021-02-05 19:42:23 +08:00
回复了 Dongxiem 创建的主题 Go 编程语言 几个关于 Go Runtime 的问题
@byte10 #45 为什么要创建线程,而且使用读写磁盘文件这种阻塞式 IO 的话,goroutine 封装了 syscall,会自动分离 M 跟 G,自动创建线程去应付这种阻塞式 IO,不比你手动去创建线程强 100 倍?
2021-02-05 15:34:26 +08:00
回复了 Dongxiem 创建的主题 Go 编程语言 几个关于 Go Runtime 的问题
@love2020 #42 没有什么深不可测的.. 你如果去读一下 linux 0.12 的代码 基本上都懂了.. 微信群..
2021-02-05 15:12:43 +08:00
回复了 Dongxiem 创建的主题 Go 编程语言 几个关于 Go Runtime 的问题
@kksco #38 我有吹水群的 你发下 id 我拉你进去..
2021-02-05 14:46:07 +08:00
回复了 Dongxiem 创建的主题 Go 编程语言 几个关于 Go Runtime 的问题
@weiwenhao #29 这个要看是用 引用计数 还是 可达性分析,如果是引用计数的话 那就是跟 python 一样,每个对象有一个引用计数器,当它变成 0 的时候 这样就能回收,如果是可达性分析,那就要判断当前程序运行时这个状态哪些对象是不能被回收的,例如我 A->B->C 三个方法调用 C 方法在执行磁盘 IO,此时 A 跟 B 的临时变量引用或者间接引用的堆上面的内存空间 你是没法标记回收的,如果标记回收了 C 方法从内核返回回来 A 跟 B 发现自己的临时变量或者对象都不见了..那就出问题了,还有一些全局变量也是不能被回收的,因为全局变量的生命周期可能跨越整个程序的运行周期。
2021-02-05 14:39:02 +08:00
回复了 Dongxiem 创建的主题 Go 编程语言 几个关于 Go Runtime 的问题
@Dongxiem #21 你如果要完全理解 goroutine 代码 调度器代码 谁控制了线程( CPU )控制权的话,最好去读 X86 汇编跟抢占式调度原理,因为无论协程 线程都是抽象的概念,只要能保存其上下文 例如线程只要操作系统保存 RSP RBP IP 寄存器 CPU 就能在线程之间 不断来回切换,另外操作系统在进程之间切换 可能还要修改 CR3 寄存器 因为每个进程的内存地址空间不一样,但是对于协程来讲,我不清楚协程内部是如何维护栈幁的,但是原理肯定是相同的,无非是保存当前运行状态的寄存器跟各种上下文的东西 以便切换回来的时候 使用..
2021-02-05 14:33:06 +08:00
回复了 Dongxiem 创建的主题 Go 编程语言 几个关于 Go Runtime 的问题
@Dongxiem #27 我觉得你可能对 M 这个抽象的概念没理解清楚,每个 M 实际上就是一个操作系统线程,它自己有自己的线程栈幁,然后它拿到 goroutine 的时候 可以把 寄存器保存起来,然后把 goroutine 的协程上下文等寄存器变量换上去,然后把对 CPU 的控制权 交给 goroutine (在汇编层面上 可能就是 JMP 到 goroutine 的代码 恢复 goroutine 之前被暂停时的上下文状态) .. 然后 goroutine 运行到一定时候 例如调用方法 或者 使用网络 IO 它会自动把对 CPU (线程)的控制权 让给 M 的调度代码.. 或者 goroutine 长期占用线程不放,这个时候会有操作系统提供的信号中断机制 强行迫使 goroutine 放弃对 CPU 的控制权,然后代码会跳回到调度器 重新进行调度..
2021-02-05 14:27:13 +08:00
回复了 Dongxiem 创建的主题 Go 编程语言 几个关于 Go Runtime 的问题
@Dongxiem #27 然后调度代码的话 每一个 M 都是有自己的 线程栈幁的,调度的时候 有调度队列,不同的 M 可以去其它 M 的队列里面去偷 goroutine 执行,这可以理解吗?因为暂停 goroutine 的话 只要保存 goroutine 的协程栈幁就好了..
2021-02-05 14:24:48 +08:00
回复了 Dongxiem 创建的主题 Go 编程语言 几个关于 Go Runtime 的问题
@Dongxiem #27 运行时的原理?我不知道你提出的问题 具体是什么,代码无非是运行在 ring3 用户态上,基本上所有操作都是要用操作系统 提供的 API,初始化? 初始化就更简单了 malloc 一个连续内存地址 就能当做协程的栈帧使用,栈幁只是一个逻辑的概念。
2021-02-05 14:04:23 +08:00
回复了 Dongxiem 创建的主题 Go 编程语言 几个关于 Go Runtime 的问题
@Dongxiem #21 这个你要了解 runtime 每个细节的话,只能去看源代码了, 我只是提供一些大致上的思路,因为很多东西道理是一样的,例如垃圾回收 肯定要暂停 goroutine 维持 变量之间的引用关系的一致性,不然你一边在修改变量引用关系 又进行垃圾回收 是不现实的..
2021-02-05 13:45:28 +08:00
回复了 Dongxiem 创建的主题 Go 编程语言 几个关于 Go Runtime 的问题
@Dongxiem #18 runtime 当然 还有 垃圾回收器.. 忘记讲了 垃圾回收也是 runtime 一部分
2021-02-05 13:29:16 +08:00
回复了 Dongxiem 创建的主题 Go 编程语言 几个关于 Go Runtime 的问题
@1011 #16 其实也不是优雅的问题,以前线程的通信,肯定使用监视器锁去做,这样 调度 同步都是内核来完成的,应用态的语言包括我们应用程序员都是没有改造权限的,golang 做的一个事情就是把原本让内核干的事情,都夺回来来让应用层自己来干,因为操作系统其实 提供像信号这种中断机制,就类似 CPU 提供给操作系统的时钟中断一样,也就是 go 调度器 干了原本归内核的事情.. 干了之后 我们就可以自己优化策略,或者用其它的抽象 例如管道 来替代锁这种抽象
2021-02-05 13:08:36 +08:00
回复了 Dongxiem 创建的主题 Go 编程语言 几个关于 Go Runtime 的问题
@love2020 #14 没事,多搜索就好了..

我分享的 可能广度 深度都有,
可能很多人 根本不知道 ABI monitor 监视器 栈幁 fastcall stackfuul stackless 这种东西,
你如果计算机体系结构 都了解的话,就不会产生这种疑惑了
2021-02-05 10:54:40 +08:00
回复了 Windsooon 创建的主题 职场话题 技术面试的平等
@czfy #2

确实如此,中国人的惯性思维就是人不行,即使再谨小慎微也难以避免人会出错,我们又不是二进制电信号组成的计算机,还自带编码纠错功能,要保证工程项目不出问题,需要的是 严格的单元测试,测试把关,QA 质量体系,才能保证的,光靠人的谨小慎微没有任何用处。

其实皇帝换了这么多,你看天下不还是那个天下,人不还是那个人,人性亘古未变,文艺复兴后 变的是制度,变的是思想,人还是那个人,但是思想跟制度已经大不同。

所以我一直很佩服 走向共和编剧说的那句话, 孙中山: 暗杀是不可能会动摇专制根基的
2021-02-05 10:06:30 +08:00
回复了 Dongxiem 创建的主题 Go 编程语言 几个关于 Go Runtime 的问题
对于 C10K 问题
2021-02-05 10:04:54 +08:00
回复了 Dongxiem 创建的主题 Go 编程语言 几个关于 Go Runtime 的问题
第二点 我待会下午补充
1 ... 6  7  8  9  10  11  12  13  14  15 ... 83  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1026 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 22ms · UTC 18:48 · PVG 02:48 · LAX 10:48 · JFK 13:48
Developed with CodeLauncher
♥ Do have faith in what you're doing.