有些事情,不该去做,你却做了。
有些人,不该去想,你却想了。
漫漫长夜无眠,随手播放了注定,听了一遍又一遍。偶然间突然发现专辑的名字的是《滚石三十青春音乐记事簿-不让你睡》,不睡就不睡,也许注定吧。
不能奢求更多,你许过的愿,老天基本也都帮你做了。上天对得起我,我也要对得起其他人。
新年了,许了几个愿望,也不为难上天,能帮我做的就做了吧,有些事情,非人力所能为。
愿现世安稳,岁月静好!
有些事情,不该去做,你却做了。
有些人,不该去想,你却想了。
漫漫长夜无眠,随手播放了注定,听了一遍又一遍。偶然间突然发现专辑的名字的是《滚石三十青春音乐记事簿-不让你睡》,不睡就不睡,也许注定吧。
不能奢求更多,你许过的愿,老天基本也都帮你做了。上天对得起我,我也要对得起其他人。
新年了,许了几个愿望,也不为难上天,能帮我做的就做了吧,有些事情,非人力所能为。
愿现世安稳,岁月静好!
not a good day,that is all
首先我面壁,我是码农!
我公司有一套自己写的log组件,这个组件最大的神奇之处就在于跨进程的log。这个是我第一次见,之前写的程序也没有这方面需求,只是自己log写文件就ok了。
但是我有个想法,这跨进程挺好的,可是万一我想跨机器log了,这不就嗝屁了吗?
不行!
于是自己折腾了一个log。当然是通过tcp了,这样有网络就行了。整个log只用了一个锁,跨进程间是不会互相影响的。即便这个锁,也是加在一个循环队列的buffer上的。以后完全有可能使用无锁的方式优化掉,这就相当于这个log组件完全无锁。唯一的缺点就是需要跑一个logserver来接收程序的log,当然你也是连在这个server上看log的。同时正在做一个web的前台,用户可以再前台设置log级别,查看log。最后,亲,跨平台的哦,支持windows/linux , c、c++、java哦,欢迎购买,包邮哦!
目前粗则了下性能,本机能够达到每秒5w+,log一个不丢。比较了下,功能没有log4cxx强大,但速度比log4系列的有优势。而且可以动态调整log级别。另外,在log极多的情况下,查看log的用户数越多,性能会下降。
然后,我深知诸多大神鄙视这种造轮子的行为,可TMD的真的没找到能跨机器log的东西啊啊啊啊啊。。。。。
log4CXX到是有socket的appender,可那个东西的效率实在不能接受的。
下面主要说具体的做法:
其实这玩意说白了就两件事:
1、从tcp接收纯文本。
2、把文本从tcp发出去。
但搞对了就不那么容易了,搞好了,就更难了。
如果你尝试写一个,你会发现以下的问题
1、tcp粘包的,拆包的问题。既如何区分出一条完整的log,这个不难。
2、网络异步的发送和接收。当然不能用同步的,那会导致导致恩你自己想。。。
3、log的格式自定义,这个有点难度。
4、动态log级别调整,这个也有难度。
5、网络异常后自动恢复。这个不难。
搞好了,就涉及到以下问题。
1、尽一切可能减少copy。这个用了shareptr来解决。
2、尽可能减少malloc。这个找了一个mempool来解决。(效果不明显)
3、在lan上是没有问题,在wan上就需要考虑数据的压缩。log都是纯文本,压缩来减少数据传送。当然,配套的读log的东西也是要自己写的。
4、多线程的问题,每连接一个线程的模型是不能接受的。事实上,数据接收和处理各有一个线程,两个线程而已(当然线程数目是可以配置的)。数据接收和发送各有一个thread pool。
5、界面。这个仁者见仁了,可能大部分人认为log还有个界面,不能理解。事实上,这玩意很有用,真的!
插播新闻:c++0x上个星期投票通过了!!!
boost是个好东西,居家旅行,杀人放火必备良器。boost:: shared_ptr boost::function boost:: bind boost::asio这些东西都太犀利了。 当然学习成本是有点高,而且这玩意难调得一腿啊,当时少写了个括号,报了几十个错误,还没一个错误正确指出错误的地方,shit!不过用熟悉了,也就知道怎么回事了,运行时错误,跟到boost代码里面,大部分也都豁然开朗了。现在公司里面就用stl,我经常想,要是这玩意用boost,至于写那么多线程,那么多锁吗。。。。还有就是那个ptlib,也不是说它不好,可是这玩意太小众了,还有一堆莫名其妙的地方。资料也木有,只能看源码,不过我也不想看,有时间看他的,还不如看看boost的。
看源码的话,现在小有点经验了,体验也多了,记得以前最怕看别人写的东西。在调程序的时候,看到boost的源码,当时就想说tnnd,竟然可以这样写。。。
今天就废话这么多,看哈利波特去了。
1、坚持发每日一图。
2、坚持锻炼身体。
以上,立blog为据。
妈妈说,你究竟有多惦记红烧肉啊。。。。。。
连着写了七八百行代码,在一个细节上失手了,调试了N久,太tmd不划算了。。。。
写 del 写 del 纠结了无数次,写了以下点点字
本来还是不想纠结题目的,最后还是有了这个题目。
我本来也不是个复杂的人,也不想当个复杂的人。
然后有了这些也不算复杂的事情。
算了,简单生活,别人也不会对你复杂。
你来,我就相信你不会走,你走,我就当你没来过。
你若要走,我不会留,其实估计你也没想留过吧。
每一个幸福的奥特曼背后都有一只默默挨打的小怪兽。
每一个复杂的问题的背后都有一个简单的原因。
刚刚写了一个类似这样的代码
int i =0 ;
无数行
i = 10;
无数行
assert(i==0);
shit a !!!
http://douban.fm/?start=552456g1d3fg0&cid=0
在听豆瓣电台,忽然觉得很好听。陈奕迅的好久不见:)
Recent Comments
@又秀逗了
@Waiting U Here
@贴一个自己用的log4j配置的模板
@评论开启
@今天过生日