Fork me on GitHub
摘要: 今天讲一个常见的gc compiler(也就是官方版本的go编译器和runtime)在垃圾回收的扫描标记阶段做的优化。 我对这个优化的描述印象最深的是在bigcache的注释里,大致内容是如果map的键值都不包含指针,那么gc扫描的时候不管这个map多大都不会深入扫描map内部存储的数据,只检查ma 阅读全文
posted @ 2024-03-25 14:46 apocelipes 阅读(929) 评论(0) 推荐(3) 编辑
摘要: errgroup想必稍有经验的golang程序员都应该听说过,实际项目中用过的也应该不在少数。它和sync.WaitGroup类似,都可以发起执行并等待一组协程直到所有协程运行结束。除此之外errgroup还可以在协程出错时取消当前的context,以及它还能控制可运行的协程的数量。 但在日常的代码 阅读全文
posted @ 2024-01-29 11:00 apocelipes 阅读(264) 评论(0) 推荐(1) 编辑
摘要: 这篇文章并不讨论chan因为加锁解锁以及为了维持内存模型定义的行为而付出的运行时开销。 这篇文章要探讨的是chan在接收和发送数据时因为“复制”而产生的开销。 在做性能测试前先复习点基础知识。 本文索引 数据是如何在chan里流动的 情况1:发送的数据有读者在读取 情况2:发送的数据没有读者在读取 阅读全文
posted @ 2024-01-17 10:31 apocelipes 阅读(311) 评论(0) 推荐(2) 编辑
摘要: PEP703是未来去除GIL的计划,当然现在提案还在继续修改,但大致方向确定了。 对于实现细节我没啥兴趣多说,挑几个我比较在意的点讲讲。 ## 尽量少依赖原子操作的引用计数 没了GIL之后会出现两个以上的线程同时操作同一个Python对象的情况,首先要解决的是引用计数的计算不能出岔子,否则整个内存管 阅读全文
posted @ 2023-09-05 15:21 apocelipes 阅读(499) 评论(0) 推荐(1) 编辑
摘要: 经过了半年左右的开发,golang 1.21 在今天早上正式发布了。 这个版本中有不少重要的新特性和变更,尤其是在泛型相关的代码上。 因为有不少大变动,所以建议等第一个patch版本也就是1.21.1出来之后再进行升级,以免遇到一些意外的bug带来麻烦。 好了,一起来看看1.21带来的新特性吧。 本 阅读全文
posted @ 2023-08-09 17:31 apocelipes 阅读(3644) 评论(0) 推荐(2) 编辑
摘要: golang的泛型已经出来了一年多了,从提案被接受开始我就在关注泛型了,如今不管是在生产环境还是开源项目里我都写了不少泛型代码,是时候全面得回顾下golang泛型的使用体验了。 先说说结论,好用是好用,但问题也很多,有些问题比较影响使用体验,到了不吐不快的地步了。 这篇文章不会教你泛型的基础语法,并 阅读全文
posted @ 2023-07-24 13:30 apocelipes 阅读(2811) 评论(4) 推荐(2) 编辑
摘要: 去年看到字节跳动给golang提了issue建议把map的底层实现改成SwissTable的时候,我就有想写这篇博客了,不过因为种种原因一直拖着。 直到最近遇golang官方开始讨论为了是否要接受SwissTable作为map的默认实现,以及实际遇到了一个hashtable有关的问题,促使我重新思考 阅读全文
posted @ 2023-07-18 11:34 apocelipes 阅读(1804) 评论(1) 推荐(1) 编辑
摘要: 今天讲讲怎么让golang程序生成coredump文件,并且进行调试的。 别看我写了不少golang的博客,其实我平时写c++的时间更多,所以也算和coredump是老相识了。`core dump`文件实际上是进程在某个时间点时的内存映像,当时进程使用的内存是啥样就会被原样保存下来存在文件系统的某个 阅读全文
posted @ 2023-07-08 10:28 apocelipes 阅读(1869) 评论(0) 推荐(0) 编辑
摘要: 最近翻开源代码的时候看到了一种很有意思的switch用法,分享一下。 注意这里讨论的不是typed switch,也就是case语句后面是类型的那种。 直接看代码: func (s *systemd) Status() (Status, error) { exitCode, out, err := 阅读全文
posted @ 2023-05-03 06:03 apocelipes 阅读(1969) 评论(14) 推荐(4) 编辑
摘要: 对于无类型常量,可能大家是第一次听说,但这篇我就不放进拾遗系列里了。 因为虽然名字很陌生,但我们每天都在用,每天都有无数潜在的坑被埋下。包括我本人也犯过同样的错误,当时代码已经合并并发布了,当我意识到出了什么问题的时候为时已晚,最后不得不多了个合并请求留下了丢人的黑历史。 为什么我要提这种尘封往事呢 阅读全文
posted @ 2023-03-20 13:21 apocelipes 阅读(512) 评论(9) 推荐(0) 编辑