0%

简单说,惊群是因为多进程(多线程)在同时阻塞等待同一个事件的时候(休眠状态),当事件发生时,就会唤醒所有等待的(休眠的)进程(线程)。但是事件只能被一个进程或线程处理,而其他进程(线程)获取失败,只能重新进入休眠状态,这种现象和性能浪费就叫做惊群

阅读全文 »

linux系统中,实现socket多路复用的技术有selectpollepoll 等多种方式。这些不同方式个有优缺点和适用场景,这不是本文讨论的重点,又兴趣的可以自己搜索学习一下。但是在高并发场景下, epoll 性能是最高的, Nginx 都听说过吧,大名鼎鼎的Nginx 底层用的就是 epoll

阅读全文 »

go 是自带gc的语言,会自动管理内存,不用像C/C++那样,需要程序员手动释放内存,不用手动管理内存,就能少掉很多头发

阅读全文 »

编译C/C++文件时,很多时候都是直接使用像 gcc main.c 或者 g++ main.cpp 这样的命令编译的。但是代码文件多了后,这样编译就很困难了。这时候 就出现了MakeFile 这个工具。

MakeFile 解决了多个文件编译难的问题,有了MakeFile,只需要在MakeFile的目录中 运行一下make 命令, 编译就会自动完成。但是编写MakeFile又很啰嗦,于是聪明的程序员们有开发了一个工具,自动生成MakeFile 文件,cmake 的作用就是自动生成MakeFile。毕竟写cmake要比写MakeFile要简单很多

阅读全文 »

golang中是有指针概念的,但是go中的指针功能被限制了,不像C/C++中那样,可以对指针进行运算

比如在C/C++中 *p++ 这样是正确的。但是在go中,这样写是错误的。至于go为什么会屏蔽指针的运算,比较多的一种说法是go团队认为指针的运算会带来一些安全问题,再有就是简化语法,所以go直接就不支持指针运算了。

阅读全文 »

近来无事,本着爱折腾的原则,在go原生 http client 的基础上,自己封装了一个go的http client。由于才疏学浅,再加是第一次造轮子,在各位大佬面前献丑了,写的烂的地方,请轻喷。还请各位不吝赐教。

阅读全文 »

工作中经常需要写shell脚本来处理一些重复的东西,使用脚本自动编译,使用脚本多机器传输文件。

因为不是天天写shell,只是用到的时候写一个,再加上脚本中的if的判断条件有点多,容易忘记,所以做个备忘录,以备不时之需

阅读全文 »

golang这门语言,有个比较好的特性,就是支持函数的多返回值。想C,C++,Java等这些语言,是不支持函数多返回的。但是C,C++可以使用传递指针,实现函数多返回。但是,你有没有想过,golang是怎样实现函数多返回值的呢?
我们知道,C,C++是通过寄存器实现函数返回值的,也就是先把返回值写入到一个寄存器中,然后再从寄存器中,读到函数的返回值。golang也是这样实现的吗?

阅读全文 »

ansible是一个基于python开发自动化的运维工具,这个工具强大的地方是,被操作的机器上不需要安装任何软件,只需要在发起操作的机器上安装就可以使用了。
而且ansible支持很多模块,还可以基于ansible二次开发,添加自己的功能

阅读全文 »