Skip to main content

优化

David LiuAbout 1 min

优化

行锁优化

为 Map 的 Value 封装为一个结构体,其中包含一个读写锁,这样可以在读取的时候不会阻塞写入,提高并发性能

type Map struct {
    m map[string]*entry
    sync.RWMutex
}

慢同步任务优化

由于同步任务,要求一致性,所以最新的同步任务必须执行,前面的较为旧的同步任务可以不执行,所以可以通过一个全局变量来控制,如果有新的同步任务,就把全局变量设置为 true,如果有旧的同步任务,就把全局变量设置为 false,这样就可以在同步任务的开头判断全局变量,如果是 false,就直接退出,不执行同步任务,这样就可以提高性能。

为了解决提交新的同步任务时,还有旧的同步任务正在执行的问题,可以通过设置为一个整数,每次提交新的同步任务,如果当前这个整数小于 2,就把这个整数加 1,每次同步任务执行完毕,就把这个整数减 1,这样就可以保证,只有最新的同步任务会执行,旧的同步任务不会执行。

在多线程并发提交任务时,为了防止出现并发安全问题,可以使用 sync.Mutex 来加锁,保证同一时间只有一个线程可以修改这个整数。