07 2023 档案
摘要:udp的好处很明显,效率高,减少了建立连接的流程,减少了报文头的占比,也减少了维护连接的开销。缺点就是不稳定,会丢包。还有就是由于udp的高效,导致用于udp的一些应用开发,并发都比较大,更容易丢包。 # io复用 SO_REUSEADDR SO_REUSEPORT 创建listener用来监听数据
阅读全文
摘要:如果我们写了一个程序,监听特定信号,完成某些动作,如何向进程发送这个系统信号呢。 ``` kill -SIGUSR1 1234 ``` 向进程id是1234的发送SIGUSR1信号 kill并不是杀死某个进程,只不过默认会发送一些中断信号,也可以通过它发送一些其他信号。具体有哪些信号,也可以通过ki
阅读全文
摘要:有时候想根据不同的参数编译不同的内容,可以在编译命令中增加参数。 ``` go build -ldflags -X main.mytest=abc ``` 在程序main函数前定义对应的变量 ``` var mytest = "" ``` 就可以直接使用拿到abc
阅读全文
摘要:开发高性能server的时候,不可避免的需要对原生socket做一些配置调优,包括设置io复用、接收发送缓存大小等 如果使用io复用,必须要设置监听socket为SO_REUSEADDR和SO_REUSEPORT。设置复用端口和地址还有个好处,就是程序崩溃后,端口监听有可能没有释放,必须要等两分钟才
阅读全文
摘要:具体原因和底层细节没有仔细看,不做描述,只说一下结果。循环获取UDP的socket数据,满速情况下(每个数据包获取后输出一下当前接收数据包总数),println比fmt.Println慢了1倍。比如发送10万个包,fmt.Println可以接收到9万多,而println只能接收4万~5万
阅读全文
摘要:虽然go提供了很多便于并发的功能,但是写出一个高性能的程序还是有一定挑战的。当程序遇到性能问题,go同样提供了比较好的工具便于分析。 # 引入net/http/pprof" ``` import ( _ "net/http/pprof" ) ``` # 在main函数最后启动http server
阅读全文
摘要:这是因为配置的GOPATH路径下有go.mod,也就是这两个不能在同一个目录下
阅读全文
摘要:有一个golang工程,没有go.mod,用goland打开,配置编译,会提示没有go.mod,但是增加了go.mod,又提示工程目录下引用的包找不到。 # 去掉go.mod  test()
阅读全文
摘要:因为配置`GOPATH`与`GOROOT`目录相同,所以报警,可以专门创建一个目录设置`GOPATH`。 `GOROOT`是下载安装go的目录,然后在环境变量`PATH`中配置好安装go目录下的bin目录,再创建一个目录配置为`GOPATH`即可
阅读全文
摘要:在linux系统中有很多地方可以配置环境变量,有时候我们需要增加一个或者查找具体是谁修改了环境变量,往往找不到地方。这里列举一下有哪些文件会影响环境变量。 # 配置文件 正常情况,linux系统启动的时候会按照如下加载环境变量 - `/etc/environment` - `/etc/profile
阅读全文
摘要:sflow是一种用来统计网络流量的采样方案。 # 采样方式 ## 按照包数采样 比如采样率是1000,每经过一个包,计数器减一,如果计数器为0,采样当前的数据包,然后计数器重置。 ## 随机采样 由于按照固定包数采样,有可能会采到有规律的包,影响采样有效性。比如采样率是1000,每1000个包中,9
阅读全文