优化
August 17, 2023About 1 min
优化
行锁优化
为 Map 的 Value 封装为一个结构体,其中包含一个读写锁,这样可以在读取的时候不会阻塞写入,提高并发性能
type Map struct {
m map[string]*entry
sync.RWMutex
}
慢同步任务优化
由于同步任务,要求一致性,所以最新的同步任务必须执行,前面的较为旧的同步任务可以不执行,所以可以通过一个全局变量来控制,如果有新的同步任务,就把全局变量设置为 true,如果有旧的同步任务,就把全局变量设置为 false,这样就可以在同步任务的开头判断全局变量,如果是 false,就直接退出,不执行同步任务,这样就可以提高性能。
为了解决提交新的同步任务时,还有旧的同步任务正在执行的问题,可以通过设置为一个整数,每次提交新的同步任务,如果当前这个整数小于 2,就把这个整数加 1,每次同步任务执行完毕,就把这个整数减 1,这样就可以保证,只有最新的同步任务会执行,旧的同步任务不会执行。
在多线程并发提交任务时,为了防止出现并发安全问题,可以使用 sync.Mutex 来加锁,保证同一时间只有一个线程可以修改这个整数。