1.c.writermem的意义
算法笔记
发表于
全排列
例如abcd,排列可能数等于数字个数的阶乘 4!
技术演讲技巧
发表于
关键字
wrk
发表于
优质文章整理
发表于
Go
- Go 语言机制之栈与指针
- Go 语言机制之逃逸分析
- Go 语言机制之内存剖析
- Go中string转[]byte的陷阱
- 聊一聊goroutine stack
- 为什么 Go 语言允许百万级别的 goroutines,而 Java 只允许数千级别的 threads?
- 也谈goroutine调度器
- golang核武器goroutine调度原理、channel详解
- web常见问题排查
nginx/openresty
操作系统
并行计算
elasticsearch
分布式系统
网络编程
- 怎样理解阻塞非阻塞与同步
- 我读过的最好的epoll讲解
- 大话 Select、Poll、Epoll
- [经典的”服务器最多65536个连接”误解]
- [如何可靠关闭 TCP 连接]
- 就是要你懂 TCP | 最经典的TCP性能问题
- go-under-the-hood
架构
其他
code review
发表于
常规项
代码能够工作么?它有没有实现预期的功能,逻辑是否正确等。
所有的代码是否简单易懂?
代码符合你所遵循的编程规范么?这通常包括大括号的位置,变量名和函数名,行的长度,缩进,格式和注释。
是否存在多余的或是重复的代码?
代码是否尽可能的模块化了?
是否有可以被替换的全局变量?
是否有被注释掉的代码?
循环是否设置了长度和正确的终止条件?
是否有可以被库函数替代的代码?
是否有可以删除的日志或调试代码?
go逃逸分析
发表于
概念
正常情况下对象在栈上分配内存,有些情况下会对象会在堆上分配内存,这就是逃逸。
go语言在一定程度消除了堆和栈的区别,go在编译的时候进行逃逸分析来决定一个对象放栈上还是放堆上,其中不逃逸的对象放栈上,可能逃逸的放堆上,分析的过程就是逃逸分析
逃逸分析时不止分析对象内存分配位置,也会做同步消除,如果你定义的对象的方法上有同步锁,但在运行时,却只有一个线程在访问,此时逃逸分析后的机器码,会去掉同步锁运行。
产生原因
- 变量共享
栈帧所在内存在栈帧结束后(return)变为不可访问区域,如果要栈帧中一些局部数据变量后扔有访问需求,需要将变量变为共享,具体的方法是返回局部变量的指针, 这样变量便会在堆上分配内存,后续可有效访问该块内存,达到共享的目的。
简而言之,任何时候,一个值被分享到函数栈帧范围之外,它都会在堆上被重新分配(逃逸)
Elasticsearch技术笔记
发表于