Skip to content

leoython/roumit

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

在日常操作中,有大量如此操作:枚举一个id数组,并行对每个id做某种增删改除。为了避免因为某个id的不稳定操作(连接数据库,网络异常等)导致的整体效率下降,最常见的写法就是每个元素开一个独立的goroutine去处理。但是这种做法容易造成超高的并发导致拥堵,最终降低了整体效率。

这个新增的roumit库就是专门解决这个问题。使用Map或者更好一点的MapWithTimeout,可以控制最高并发数量workNums,和每个子任务允许的操作时间timeout。一个具体例子长这样:

Ids := []int{1, 2, 3}
items := make([]*Item, len(Ids))
err := routine.MapWithTimeout(len(items), 5, time.Second, func(ctx context.Context, i int) {
    item := getItemByID(Ids[i])
    if ctx.Err() == nil {
        items[i] = item
    }
})

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages