Go version:

1
2
7384go version
go version go1.14.9 darwin/amd64

最近有这么个坑:

碰到内存泄露问题,大致是这样的:

  • 1、定义一个全局map
  • 2、给里面放值
  • 3、用完之后删除Key/value

问题:map删除完key后,Mem有没有被释放?

阅读全文 »

时区,无关语言,在任何一个系统中都会用到:

  • time「时间」
  • timeID「时间作为唯一标识」
  • time to unix
  • unix to time string

很多场景都会看到这个时间的重要性,这次看到16的特性中有一个修改项,觉得自己对time和zone了解的太少了,以此记录,以便积累。

阅读全文 »

前面主要是了解newm的全过程和其中难过一些细节逻辑,,,
如果没了解的,建议先去看下大概的过程,虽然不是非常详细,
最起码得知道newm过程,主要完成了什么操作,有利于后续理解。

这次主要是来学学这个sysmon,系统监控调度的逻辑。

阅读全文 »

上节看了go的入口函数,,,也就是你执行main函数前后所做的准备工作。

继续深入学习。「newm」第一个M,到底是怎么来的?

阅读全文 »

前面g0和m0瞎扯了部分的入口和一些关键的点。

本来应该扯扯shedule调度方面的知识,但是这个先往后放一节吧,

先学习下这个「入口函数」,毕竟对于每一个项目都会有一个入口的相关逻辑,那么go源码是怎么处理的?

有没有什么可以借鉴的嘞?!

阅读全文 »

前序

GPM算是经典的调度模型,但是每个程序都需要一个启动的函数或者入口;
GPM也不例外。
直接分析源码,显得很枯燥,如果说要你设计GPM中的G和M的执行关系,你应该怎么设计呢?

阅读全文 »

select poll epoll三个老生长谈的问题.这次不是来讲区别的,后续会更新一篇关于三者区别的。

前序

select属于linux系列的文件系统「fs」的范畴,每次的系统调用、打开软件、启动程序等等都会涉及到文件的读写,
这个是在所难免的。

那么I/O事件的基本思路:文件准备ok,开始读写,等函数返回,根据结果继续运行.

如果是自己实现,大体上无非以下思路:

阅读全文 »