摘要:
前言 goroutine 初始栈很小(≈2KB),但可以自动变大。 那它是怎么做到的? 一、先说结论 goroutine 的栈扩容是通过: 在函数调用前做“栈空间检查”,如果不够,就调用 runtime 进行扩容。 关键机制是: stack guard + morestack 二、goroutine 阅读全文
posted @ 2026-02-07 22:11
牛奔
阅读(35)
评论(0)
推荐(0)
摘要:
前言 很多人听说: goroutine 很轻,可以开几十万 但为什么轻?到底轻在哪里? 我们从 内存、创建成本、切换成本、调度方式 四个维度拆开讲清楚。 一、最核心的一句话 goroutine 轻,是因为它是用户态调度 + 小栈 + 自己管理切换。 而线程: 是内核调度 + 大栈 + 内核切换。 差 阅读全文
posted @ 2026-02-07 22:02
牛奔
阅读(30)
评论(0)
推荐(0)
摘要:
前言 “能抢占”和“频繁抢占”是两回事。 如果抢占太频繁,会导致: 上下文切换开销大 cache 失效 调度成本增加 性能下降 所以 Go 的设计目标是: 能抢占,但不会乱抢占。 我们一步步讲清楚它是怎么控制频率的。 一、核心原则:不是随时抢占,而是“时间片 + 条件触发” Go 不会在每一行代码都 阅读全文
posted @ 2026-02-07 21:45
牛奔
阅读(18)
评论(0)
推荐(0)
摘要:
一、什么是“抢占式调度”? 先理解什么是“抢占”。 非抢占式(早期 Go) 早期 Go(1.14 之前): goroutine 只有在 函数调用 channel 操作 syscall runtime 检查点 才会被切换。 如果一个 goroutine 写成: for { } 会发生什么? 👉 它永 阅读全文
posted @ 2026-02-07 21:34
牛奔
阅读(87)
评论(0)
推荐(0)
摘要:
一、为什么需要调度模型? 先问一个问题: Go 里可以同时开成千上万个 goroutine,它是怎么做到的? 如果每个 goroutine 都对应一个操作系统线程,那系统早就炸了。 因为: 线程很重(几 MB 栈空间) 创建销毁成本高 线程切换开销大 所以 Go 自己实现了一套“用户级调度器”。 二 阅读全文
posted @ 2026-02-07 21:30
牛奔
阅读(78)
评论(0)
推荐(0)
摘要:
前言 作者:白玉光 正如李飞飞在她的自传中的说的:人工智能算法不是像传统算法那样,被告知该做什么,而是通过数据来学习该做什么,这也是本文想要表达的核心内容。 导读: 推开AI的门,你是站在门外怕迟到的人。很多人害怕迟到,害怕在众目睽睽之下,被视作一个犯错的学生。就如同,AI“呼的一下”就来了,并且发 阅读全文
posted @ 2026-02-07 15:57
牛奔
阅读(47)
评论(0)
推荐(0)
摘要:
前言 最近遇到一个很头疼的问题: 在 Docker 容器里用 Go/Python/Node 等发起 HTTPS POST 请求,总是卡死,报错: net/http: TLS handshake timeout 但奇怪的是:从容器里 ping 目标域名/IP 是通的,而且延迟也很正常 用 curl - 阅读全文
posted @ 2026-02-07 15:30
牛奔
阅读(351)
评论(0)
推荐(0)
摘要:
前言 在 Docker 环境中,容器默认使用私有 IP 段(如 172.17.0.0/16 或自定义的 172.18.0.0/16、172.20.0.0/16),这些地址在互联网上是不可路由的。要让容器能访问外部网络(如 ping 8.8.8.8、拉取镜像、访问 API),必须在宿主机上对容器发出的 阅读全文
posted @ 2026-02-07 15:29
牛奔
阅读(198)
评论(0)
推荐(0)

浙公网安备 33010602011771号