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