迸发相关

最近写了几个 HTTP GET 相关的程序,一根筋的移数据枯燥了,于是就是多个 goroutines 去 GET 数据,最后其中一个程序从 1min 的执行时间减少到 10s 以内, 顿时觉得编写迸发程序瞒好玩的。

记得第一次有写迸发代码的意向是在大学期间看了一本经典的计算机类的书籍时(好像叫做计算机科学… 什么), 留意到了一个简单的累加计算的程序,就是从 1 累加到一个很大的数,方法有:

这可以说是可迸发化和并行化的问题了,说到迸发和并行,有必要理清一下:

个人感觉写并发程序最主要的有三个大的方面:

最后提一下锁,在 golang 里面有 Mutex 和 RWMutex 这两种排斥环境,Mutex 锁 (mutex.Lock) 和 RWMutex 中的 WMutex(rwMutex.Lock) 功能一样,都是对锁对像的完全占用;
RMute(rwMutext.Rlock) 允许读而只会锁住对锁对像的写操作, 所以说 RWMutex 在一定情况是比 Mutex 要高效一点(当有多个 rwMutex.Rlock 和少数 rwMutex.Lock 迸发申请时,golang 会适当让 rwMutex.Lock 优先, 避免锁对像被读锁长时间占用而无法应用写的情况)

2017-01-08