golang channel的行为
摘要:1. 读nil的channel是永远阻塞的。关闭nil的channel会造成panic。 2. closed channel的行为: (1)向close的channel发消息会panic,关闭一个已经关闭的channel,也会panic。所以应该由生产者关闭channel。 (2)如果close的c
阅读全文
posted @
2018-06-30 11:35
dearplain
阅读(394)
推荐(0)
支持rotate和大小限制的golang log库
摘要:支持大小限制和rotate的log库,还是很有必要的,前者让你不再操心磁盘被吃光,后者让查日志更方便。 但是在golang中没有太好的实现,看过一些开源的和自行实现的,都有几个不满意的地方,比如: 没有rotate的,比如glog。 写的很复杂,并且需要复杂配置的,比如seelog。 把日志先输送到
阅读全文
posted @
2018-06-18 17:34
dearplain
阅读(2678)
推荐(1)
goloader - golang动态加载的实现
摘要:github地址:https://github.com/dearplain/goloader 这里有以前的一些思路:http://www.cnblogs.com/dearplain/p/8145985.html,不过改了好多,具体还是要看代码。 这个动态加载库是很有意思的项目,它直接重用了golan
阅读全文
posted @
2018-03-11 12:21
dearplain
阅读(12009)
推荐(0)
golang其实也可以优先调度
摘要:线上一个服务有个严重问题,处理消息数1k/s提升不上去,经过查看是阻塞在了一个新加的函数上,这个函数负责收集信息,送到一个channel上,再由某个函数处理,这个处理函数很简单,看不出任何问题,最大的特点是为了不加锁,只起一个goroutine。 问题很明显了,只起一个goroutine,当系统繁忙
阅读全文
posted @
2018-01-12 16:11
dearplain
阅读(3196)
推荐(0)
golang动态加载原生代码思路
摘要:update: 实现在此,欢迎star: https://github.com/dearplain/goloader 实现后的一些介绍:http://www.cnblogs.com/dearplain/p/8543804.html golang动态加载原生代码思路(非plugin,非so文件。使用m
阅读全文
posted @
2017-12-30 11:55
dearplain
阅读(6731)
推荐(1)
msgpack库的神奇用法
摘要:一般来说,我们接收到消息,然后通过消息队列发送消息给worker的时候,会有些额外的字段,这些字段不属于实际的消息,我们想把实际的消息和发给worker的消息分开定义。这时候我们会把worker消息中一个字段定义为interface{}或者object,这个字段表示任意的实际消息。 一切看起来很完美
阅读全文
posted @
2017-11-30 16:05
dearplain
阅读(9697)
推荐(0)
高性能无锁队列,代码注释
摘要:性能非常强大,和Disruptor的无锁队列一样,达到1400w/s。 对比其他Disruptor实现(https://github.com/LMAX-Exchange/disruptor, https://github.com/smartystreets/go-disruptor),这个实现太简洁
阅读全文
posted @
2017-10-12 12:02
dearplain
阅读(1328)
推荐(0)