Memory Allocator Trace

Posted by 夏泽民

一、由 iter 包引发的疑问 最近在 GitHub 上偶然发现了 Brad Fitzpatrick 的 iter 包,整个包只有 一个函数(一行代码):



系统调度

Posted by 夏泽民

程序其实就是一堆需要按照顺序一个接一个执行的机器指令。为此,操作系统使用了一个线程的概念。线程的工作就是按顺序执行分配给它的指令集,直到没有指令可以执行了为止。 你运行的每一个程序都会创建一个进程,并且每一个进程都会有一个初始线程。线程拥有创建更多线程的能力。这些不同的线程都是独立运行的,调度策略都是在线程这一级别上的,而不是进程级别(或者说调度的最小单元是线程而不是进程)。线程是可以并发执行的(轮流使用同一个核),或并行(每个线程互不干扰的同时在不同的核上跑)。线程还维护这他们自己状态,好保证安全、隔离、独立的执行自己的指令。 系统调度器负责保证当有线程可以执行时,CPU 是不能处于空闲状态的。它还必须创建一个所有线程同时都在运行的假象。在创造这个假象的过程中,调度器需要优先运行优先级更高的线程。但是低优先级的线程又不能被饿死(就是一直不被运行)。调度器还需要通过快速、明智的决策尽可能的最小化调度延迟。 https://www.ardanlabs.com/blog/2018/08/scheduling-in-go-part1.html https://www.ardanlabs.com/blog/2018/08/scheduling-in-go-part2.html 执行指令 Program counter(PC),有时候也被叫做指令指针(instruction pointer, 简称IP),线程用它来跟踪下一个要执行的指令。在大多数处理器中,PC 指向的是下一个指令,而不是当前指令。 如果你曾经看过 Go 程序的 stack trace,你可能注意到了每行的最后都有一个 16 进制数字。比如 +0x39和0x72。 goroutine 1 [running]: main.example(0xc000042748, 0x2, 0x4, 0x106abae, 0x5, 0xa) stack_trace/example1/example1.go:13 +0x39 <- LOOK HERE main.main() stack_trace/example1/example1.go:8 +0x72 <- LOOK HERE



hey

Posted by 夏泽民

https://github.com/rakyll/hey



gostub

Posted by 夏泽民

GoStub是一款轻量级的单元测试框架,接口友好,可以对全局变量、函数或过程进行打桩。 GoStub安装: go get github.com/prashantv/gostub 二、GoStub常用方法 gostub用于在测试时打桩变量,一旦测试运行时,重置原来的值。



goMonkey

Posted by 夏泽民

gomonkey 是 golang 的一款打桩框架,目标是让用户在单元测试中低成本的完成打桩,从而将精力聚焦于业务功能的开发 https://github.com/agiledragon/gomonkey gomonkey 1.0 特性列表如下:



Search

Popular posts

Anything in here will be replaced on browsers that support the canvas element

Recent posts

This blog is maintained by 夏泽民

Get in touch with me at 465474307@qq.com

Subscribe to our mailing list

* indicates required