在服务器开发中 通常的做法是 把 逻辑处理线程和I/O处理线程分离。
逻辑处理线程:对接收的包进行逻辑处理。
I/0处理线程:网络数据的发送和接收,连接的建立和维护。
通常 逻辑处理线程和I/O处理线程是通过数据队列来交换数据,就是生产者--消费者模型。
这个数据队列是多个线程在共享,每次访问都需要加锁,因此如何减少 互斥/同步的开销就显得尤为重要。
解决方案:双缓冲队列
背景知识:
所谓双缓冲数据就是两个队列 一个负责从里写入数据,一个负责读取数据,当逻辑线程读完数据后负责将自己的队列和I/O线程的队列进行交换。
这样需要加锁的地方 有两个从队列中写入数据和两个队列进行交换时。如果是一块缓冲区

本文探讨了服务器开发中的双缓冲队列技术,用于减少逻辑处理线程和I/O处理线程间的互斥/同步开销。通过两个独立的队列,一个用于写入,一个用于读取,实现并发读写并降低锁的使用。当一个队列读完,两个队列会进行交换,避免死锁,并确保读操作优先。队列交换策略确保了在处理数据时不会发生交换,且能及时响应状态变化的通知。
最低0.47元/天 解锁文章
565

被折叠的 条评论
为什么被折叠?



