自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

siddontang的专栏

my thought for program。

  • 博客(10)
  • 收藏
  • 关注

原创 谈谈自己造轮子

自己造还是不造轮子,这是一个哲学问题吗?

2014-04-30 08:33:37 6768 2

原创 我为什么选择go语言

这里,我并不打算引起语言争论的口水仗,我并不是什么大牛,对语言的造诣也不深,只是想通过自己实际的经历,来说说为什么我在项目中选择go。其他语言的经历C++在接触go之前,我已经有多年的c++开发经验。主要用在游戏服务端引擎开发以及P2P上面,那可是一段痛并快乐的时期,以至于我看到任何的程序钉子问题都觉得可以用c++这把锤子给敲定。但是对于互联网项目开发来说,除非你的团队整体的c++

2014-04-27 14:12:57 5363 1

原创 golang:高性能消息队列moonmq的简单使用

在上一篇moonmq的介绍中(这里),我仅仅简短的罗列了一些moonmq的设计想法,但是对于如何使用并没有详细说明,公司同事无法很好的使用。对于moonmq的使用,其实很简单,样例代码在这里,我们只需要处理好broker,consumer以及publisher的关系就可以了。首先,我们需要启动一个broker,因为moonmq现在只支持tcp的自定义协议,所以broker启动的时候

2014-04-24 14:08:30 11105 1

原创 在golang中使用leveldb

leveldb是一个很强悍的kv数据库,自然,我也希望能在go中使用。如果有官方的go leveldb实现,那我会优先考虑,譬如这个,但是该库文档完全没有,并且在网上没发现有人用于实战环境,对其能否在生产环境中使用打上问号,保险起见,我还是决定不使用。因为leveldb有c的接口,所以通过cgo能很方便的进行集成,所以我决定采用该种方式,幸运的是,已经有人做了cgo的版本,也就是l

2014-04-23 13:30:29 15335 1

原创 golang使用pprof检查goroutine泄露

有一段时间,我们的推送服务socket占用很不正常,我们自己统计的同时在线就10w的用户,但是占用的socket竟然达到30w,然后查看goroutine的数量,发现已经60w+。每个用户占用一个socket,而一个socket,有read和write两个goroutine,简化的代码如下:c, _ := listerner.Accept()go c.run()func (c

2014-04-22 10:58:04 15092 1

原创 golang:一个高性能低精度timer实现

在go自带的timer实现中,采用的是通常的最小堆的方式,具体可以参见这里。最小堆能够提供很好的定时精度,但是,在实际情况中,我们并不需要这样高精度的定时器,譬如对于一个连接,如果它在2分钟以内没有数据交互,我们就将其删除,2分钟并不需要那么精确,多几秒少几秒都无所谓的。以前我们单独实现了一个timingwheel,采用的是channel close的方式来处理低精度,超大量tim

2014-04-16 10:24:59 7586

原创 在go中使用json作为主要的配置格式

最近在用go重构,在先前的代码中,我们使用的ini文件进行配置,但是因为很多历史遗留问题,导致配置混乱,维护困难,自然也需要考虑重构了。通用配置格式通用的配置格式有很多,常用的就有ini,json,yaml,xml等,当然为了通用我们不考虑自定义的配置格式。那如何选择呢?首先,xml我们就不用考虑了,到现在为止我都没觉得用这玩意配置起来有多方便,反而很臃肿,可能java系的童鞋

2014-04-13 11:54:43 10298

原创 go中string和slice no-copy转换

在go里面,string和slice的互换是需要进行内存拷贝的,虽然在底层,它们都只是用 pointer + len来表示的一段内存。通常,我们不会在意string和slice的转换带来的内存拷贝性能问题,但是总有些地方需要关注的,刚好在看vitess代码的时候,发现了一种很hack的做法,string和slice的转换只需要拷贝底层的指针,而不是内存拷贝。当然这样做的风险各位就要好好担当

2014-04-12 17:10:23 7440 4

原创 go: 一个通用log模块的实现

在go里面,虽然有log模块,但是该模块提供的功能并不强,譬如就没有我们常用的level log功能,但是自己实现一个log模块也并不困难。对于log的level,我们定义如下:const ( LevelTrace = iota LevelDebug LevelInfo LevelWarn LevelError LevelFatal)

2014-04-07 21:36:48 6052

原创 moonmq: 用go实现的高性能message queue

介绍moonmq是一个用go实现的高性能消息队列系统,后续准备用于我们消息推送服务以及各个后台的异步任务。在设计上面,moonmq主要借鉴了rabbitmq以及rocketmq相关的思想,但是做了很多减法,毕竟我不是要设计成一个非常通用的mq。名词解释publisher,消息生产者consumer,消息消费者broker,消息中转站queue,消息存储队列pub

2014-04-03 18:30:56 9059 2

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除