Directories ¶
Path | Synopsis |
---|---|
* * 基于key/val内存缓存设计 * 1.
|
* * 基于key/val内存缓存设计 * 1. |
chan实现trylock乐观锁 * 采用cas实现乐观锁及TryLock Compare And Swap 简称CAS,在sync/atomic包种 这类原子操作由名称以‘CompareAndSwap’为前缀的若干个函数代表。
|
chan实现trylock乐观锁 * 采用cas实现乐观锁及TryLock Compare And Swap 简称CAS,在sync/atomic包种 这类原子操作由名称以‘CompareAndSwap’为前缀的若干个函数代表。 |
* golang nsq消费队列封装,提供如下功能点 1、初始化生产者 2、初始化消费者 3、提供不同方式的消费者消费模式 4、当调用InitProducer,InitConsumer后可以直接调用nsq上底层方法 也可以使用本包提供的方法,其实也是调用nsq底层方法 5、关于优雅退出生产者和消费者,请看nsq_test.go 6、通过直接连接到nsqd进行消费,速度快,但不方便拓展,建议通过lookupd查找节点进行消费
|
* golang nsq消费队列封装,提供如下功能点 1、初始化生产者 2、初始化消费者 3、提供不同方式的消费者消费模式 4、当调用InitProducer,InitConsumer后可以直接调用nsq上底层方法 也可以使用本包提供的方法,其实也是调用nsq底层方法 5、关于优雅退出生产者和消费者,请看nsq_test.go 6、通过直接连接到nsqd进行消费,速度快,但不方便拓展,建议通过lookupd查找节点进行消费 |
通过指定goroutine个数,实现task queue执行器 提交任务到tash chan中,然后不断从chan中取出task执行 结合官方的sync.WaitGroup计数信号等待执行完毕 go goroutine非抢占式的,通过runtime.Gosched()让出cpu给其他goroutine
|
通过指定goroutine个数,实现task queue执行器 提交任务到tash chan中,然后不断从chan中取出task执行 结合官方的sync.WaitGroup计数信号等待执行完毕 go goroutine非抢占式的,通过runtime.Gosched()让出cpu给其他goroutine |
* * gorm mysql封装,支持多个数据库实例化为连接池对象 * 结合了xorm思想,将每个数据库对象作为一个数据库引擎句柄 * xorm设计思想:在xorm里面,可以同时存在多个Orm引擎 * 一个Orm引擎称为Engine,一个Engine一般只对应一个数据库 * 因此,可以将gorm的每个数据库连接句柄,可以作为一个Engine来进行处理 * 容易踩坑的地方: 对于golang的官方sql引擎,sql.open并非立即连接db,用的时候才会真正的建立连接 但是gorm.Open在设置完db对象后,还发送了一个Ping操作,判断连接是否连接上去 对于短连接的话,建议用完就调用db.Close()方法释放db连接资源 对于长连接服务,一般建议在main/init中关闭连接就可以 具体可以看gorm/main.go源码85行
|
* * gorm mysql封装,支持多个数据库实例化为连接池对象 * 结合了xorm思想,将每个数据库对象作为一个数据库引擎句柄 * xorm设计思想:在xorm里面,可以同时存在多个Orm引擎 * 一个Orm引擎称为Engine,一个Engine一般只对应一个数据库 * 因此,可以将gorm的每个数据库连接句柄,可以作为一个Engine来进行处理 * 容易踩坑的地方: 对于golang的官方sql引擎,sql.open并非立即连接db,用的时候才会真正的建立连接 但是gorm.Open在设置完db对象后,还发送了一个Ping操作,判断连接是否连接上去 对于短连接的话,建议用完就调用db.Close()方法释放db连接资源 对于长连接服务,一般建议在main/init中关闭连接就可以 具体可以看gorm/main.go源码85行 |
*runner用于按照顺序,执行程序任务操作,可作为cron作业或定时任务 runner 包可用于展示如何使用通道来监视程序的执行时间,如果程序运行时间太长,也可以 用 runner 包来终止程序。
|
*runner用于按照顺序,执行程序任务操作,可作为cron作业或定时任务 runner 包可用于展示如何使用通道来监视程序的执行时间,如果程序运行时间太长,也可以 用 runner 包来终止程序。 |
利用无缓冲chan创建goroutine池来控制一组task的执行 1.
|
利用无缓冲chan创建goroutine池来控制一组task的执行 1. |
workerPool实现百万级的并发 go程序开发过程中,通过简单的调用go func 函数来开启协程,容易导致程序死锁 并且会无限制的开启groutine,groutine数量激增的情况下并发性能会明显下降 所以需要考虑使用工作池来控制协程数量,以达到高并发的效果.
|
workerPool实现百万级的并发 go程序开发过程中,通过简单的调用go func 函数来开启协程,容易导致程序死锁 并且会无限制的开启groutine,groutine数量激增的情况下并发性能会明显下降 所以需要考虑使用工作池来控制协程数量,以达到高并发的效果. |
* 自定义错误类型,一般用在api/微服务等业务逻辑中,处理错误 支持是否输出堆栈信息,可以把stack信息记录到日志文件中,方便定位问题
|
* 自定义错误类型,一般用在api/微服务等业务逻辑中,处理错误 支持是否输出堆栈信息,可以把stack信息记录到日志文件中,方便定位问题 |
Click to show internal directories.
Click to hide internal directories.