摘要: Basic 执行顺序 1. app.Run阻塞 2. app.Action 3. app.Run继续 Flag app.Flags 和命令行参数的区别就是: Flags是指定了参数含义的,顺序可换,另一个Args顺序是约定,顺序不可换,所以尽量用Flag就好。 使用help查看,发现Flags对应G 阅读全文
posted @ 2020-03-09 14:31 sicnu-yudidi 阅读(189) 评论(0) 推荐(0)
摘要: 第一个例子 不会打印OK "关于 Go1.14,你一定想知道的性能提升与新特性" 为什么不会打印? "golang高并发模型" 第二个例子 package main import ( "fmt" "runtime" "time" ) func main() { for i := 0; i 所以我们可 阅读全文
posted @ 2020-03-08 17:41 sicnu-yudidi 阅读(274) 评论(0) 推荐(0)
摘要: 主要回答的问题 1. 进程,线程,协程区别 2. 虚拟内存 3. 局部性原理 4. Go 1.0调度器的4个缺点 5. Go 1.1调度器如何应对这4个缺点 6. GMP模型 7. 本地队列与全局队列的负载均衡 8. 查看调度器日志 9. GMP的状态转换 进程,线程,协程 TODO 虚拟内存 局部 阅读全文
posted @ 2020-03-08 15:17 sicnu-yudidi 阅读(282) 评论(0) 推荐(0)
摘要: 为什么引入栈 完成函数调用的过程,需要有个地方存放函数调用返回后要执行的指令地址(简称返回地址) 极客时间 深入计算机组成原理 函数调用过程中,栈的使用 rip寄存器: 存放下一条要执行的指令地址 callq指令做两件事 1. 把rip的地址A3压栈(也就是被调用函数返回后,调用者本来接下来会执行的 阅读全文
posted @ 2020-03-07 23:36 sicnu-yudidi 阅读(372) 评论(0) 推荐(0)
摘要: 前置知识点: go程序中,任何对系统 API 的调用,都会被 runtime 层拦截来方便调度。 go一共有4种阻塞的情况,并且这些阻塞都是可以被runtime检测到的,runtime检测到阻塞时就可以进行优化处理。 1. blocking syscall (for example opening 阅读全文
posted @ 2020-03-05 19:28 sicnu-yudidi 阅读(2279) 评论(0) 推荐(0)
摘要: 先看这个 "谈谈调度 Linux O(1)" linux scheduler的主要操作: search+insert 1. 查找要执行的任务(search) 2. 任务执行完时间片后放回或删除(insert/delete) 3. 切换上下文 // 这个最多只有CPU核数那么多个线程需要切换,所以本身 阅读全文
posted @ 2020-03-05 18:14 sicnu-yudidi 阅读(273) 评论(0) 推荐(0)
摘要: 从Go 1.0 到 Go 1.1,作者有篇设计文档 "Scalable Go Scheduler Design Doc" 。 我一直觉得奇怪,为什么要说是Scalable呢。 后来在go夜读的一次讨论中,了解到linux2.4 linux2.6的调度器优化过程也类似的原因和过程。 Go 1.0和li 阅读全文
posted @ 2020-03-05 15:07 sicnu-yudidi 阅读(278) 评论(0) 推荐(0)
摘要: 现状(What) 基于同一个task_struct结构体,这个结构体既能代表进程也能代表线程,同时这个结构体也是内核调度的最小单位。 这个结构体有2个字段,pid字段用于唯一标识一个task_struct(用于内核调度), tgid字段标记一组task_struct, tg是thread group 阅读全文
posted @ 2020-03-05 00:54 sicnu-yudidi 阅读(552) 评论(0) 推荐(0)
摘要: "如何恰当地选择非限制性和限制性定语从句? Mr.Blake的回答" 1. 限制性定语从句(defining relative clauses)使用的场合是:我们需要提供某人或某事物的“关键信息”,用来明确指代对象。 如果没有这些“关键信息”,我们很可能搞不清楚到底说的是谁、是哪一个、哪一些,或者理 阅读全文
posted @ 2020-03-04 12:36 sicnu-yudidi 阅读(201) 评论(0) 推荐(0)
摘要: 注: 只讲了调度器,不涉及任何GC相关知识 "预备知识" 回顾一下Go调度器的发展历程 参考附录9 新旧2种调度器 "调度系统设计精要" 验证真抢占式调度是哪个版本引入的 "Go Version Manager用于切换不同版本的Go" "这里说到1.14之前都是请求抢占,1.14才是真抢占" Sch 阅读全文
posted @ 2020-02-29 22:51 sicnu-yudidi 阅读(346) 评论(0) 推荐(0)