- 博客(11)
- 收藏
- 关注
原创 prometheus+grafana 搭建监控报警系统
1、prometheus是什么2、本地下载安装prometheus2.1 去prometheus官网查找prometheus的最新包地址2.2 安装> cd ~> mkdirpackages> cdpackages>wget https://github.com/prometheus/prometheus/releases/download/v2.33.0-rc.0/prometheus-2.33.0-rc.0.linux-amd64.ta...
2022-01-21 17:52:33
1052
原创 go chanel
1、发送数据1.1 直接发送数据直接发送数据是指 如果已经有阻塞的接收goroutines,那么数据将被直接发送给接收goroutine1.2 缓冲区有可用空间1.3 缓冲区无可用空间,goroutine要么直接返回要么阻塞等待2、接收数据2.1 直接接收数据2.1.1 没有缓冲区,直接从阻塞的goroutine接收数据2.1.2有缓冲区,则从缓冲区接收数据,如果有阻塞的goroutine则唤醒2.2 缓冲区没有数据,goroutine要么直接返回要么阻塞等待2.3缓冲区有.
2022-01-19 18:12:01
503
原创 浅谈 go netpoll
1.先谈epollhttps://zhuanlan.zhihu.com/p/647465091.1 epoll定义是I/O多路复用的一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪,就是这个文件描述符进行读写操作之前),能够通知程序进行相应的读写操作。Level_triggered(水平触发):当被监控的文件描述符上有可读写事件发生时,epoll_wait()会通知处理程序去读写。如果这次没有把数据一次性全部读写完(如读写缓冲区太小),那么下次调用 epoll_wai
2020-06-04 11:48:01
646
原创 对操作系统虚拟内存机制的理解
1.如果把二进制程序全部加载到内存中,会出现一种情况就是明明内存还有空间,但是不够二进制程序的大小,所以也加载不了,这样很浪费内存,而且会产生外部碎片。所以就改良成2中描述的方案。2.采用页表的方式对内存进行管理。分页将物理内存和可执行程序划分成很小的区块,这个区块定义为页,每个页的大小为4k,二进制程序中不足4k的页默认为4k。操作系统会为每个进程维护一个页表。页表主要记录进程的页号与内存中的页号的对应关系。这样的话就没有要求二进制程序加载到物理内存中必须是连续的,不会产生外部碎片,但是因为二进制程序
2020-05-20 23:36:06
275
原创 gock:mock http 请求的实现原理及使用
原理: 其实 gock 主要是是改变了requestClient的Transport。gock 定义了一个新的Transport 替换了requestClient的 Transport (http.DefaultTransport),新的Transport 结构体重写了RoundTrip 方法,主要是在这个方法对 http request 进行拦截,去匹配 m...
2020-04-29 09:08:31
1161
原创 golang NewTimer/NewTicker 源码阅读
1.引出 src/runtime/time.go 中的 startTimerNewTimer 和 NewTicker 分别在 src/time/sleep.go、src/time/tick.go 这两个文件下。这两个函数最主要的区别是NewTimer在初始化runtimeTimer的时候没有初始化period属性。不管是 NewTimer 还是 NewTicker 最终的实现都是调用 sta...
2020-04-29 08:57:55
424
原创 ln 在实际工作中的应用
我们有两个gitlab仓库,每次我更新一份文档都需要往这两个gitlab仓库上传。 一开始我试着用其中一个gitlab仓库下(暂且命名为gitlab1)的这份文档做源文件,另外一个gitlab仓库(暂且命名为gitlab2)的文档则ln -s为目标文件,但是发现上传到gitlab2仓库的也是一个链接文件(如下图),我不知道这样会不会出错。 ...
2019-02-23 14:01:03
481
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人