现在需求里面,锁太拉低性能了。 所以想看看有木有不需要锁的生产者和消费者队列。 在网上搜索,发现都用的ringbuffer那样的循环队列。 可是怎么看怎么都不安全啊。
经过仔细测量, 发现不是锁问题,锁耗时大约是0.0005ms左右。 这样的锁,在生产者和消费者的队列中,能满足我最多10W/秒的同步。 而我的同步次数只是 3W/秒。 问题出在其他内核IO上了。 谢谢各位。 不过尽管如此,还是感觉,这样的锁太浪费性能了。 不知道有没有更好的设计。
对于环形缓冲区: 1、单个生产者,单个消费者共两个线程的,可以不加锁。例如环形缓冲区的大小是1000,两线程各保有一个递增变量x,每次操作x%1000位置的数据即可。也就是说,生产者始终知道自己该往哪放新产品,消费者始终知道自己该在哪取新产品。 需要注意的是,消费者不积极的时候,生产者可能会把缓冲区填满,这个是大问题。不加锁就要求缓冲区足够大。 2、多个生产者多个线程,多个消费者多个线程的,可以利用Interlocking来做锁,和一般的内核锁相比效率是大大提高了的,可以忽略不计。仍然可以用上边的思路。
5,530
社区成员
4,169
社区内容
加载中
试试用AI创作助手写篇文章吧