首先澄清一下,最近发了好几个帖子,有的标明了坐等结贴的,虽然还没有找到更好的满意答案,但是也可以结贴了,今天尝试结贴,好几次都失败,因为CSDN出了bug,结不了,望大家原谅,bug没有后立即结贴。我打算用一个线程select侦听链路,另一个线程接收数据,当某个socket有数据可以接收的时候,立即pthread_cond_signal通知接收线程接收。
我接收的是每秒15帧左右的h264数据,每帧数据大小为80K左右,线程肯定是来得及收的,这样频繁的线程切换操作会影响性能吗? 发现了收了一段时间后pthread_cond_signal无法唤起线程中的pthread_cond_wait了(这时候线程已经收完数据空闲了),怎么会这样呢?多线程接收客户端的数据服务程序,一般怎么设计比较好呢?
多谢了!
我接收的是每秒15帧左右的h264数据,每帧数据大小为80K左右,线程肯定是来得及收的,这样频繁的线程切换操作会影响性能吗? 发现了收了一段时间后pthread_cond_signal无法唤起线程中的pthread_cond_wait了(这时候线程已经收完数据空闲了),怎么会这样呢?多线程接收客户端的数据服务程序,一般怎么设计比较好呢?
多谢了!
恩,我是这样的,一个线程用select检测,可读的时候把socket信息传递给线程或线程池,然后去收,这时候传递数据的时候如何加锁有点混乱,还有就是如果select检测到缓冲区有数据可读,让线程池去收,结果线程池还没来得及收完,下一次select又来了,在没有数据到来的情况下,因为缓冲区的数据还没有收完,又会通知线程池收,这样就会重复收了,自己加了变量标示,但是感觉有点乱,不知道有没有好的模型。
一个线程专门处理连接请求,一个线程专门处理数据,N个连接处理数据接收。这样就非常清楚了
推荐考虑boost的asio的异步模式,它采用回调方式应该也能处理你的当数据没接收完时又会有select消息通知的问题