日期:2014-05-16  浏览次数:20702 次

请教,TCP EPOLL 与线程池 合用导致我接受的数据包投递有可能乱序的问题
请教,TCP EPOLL 与线程池 合用导致我接受的数据包投递有可能乱序的问题


有事件数据到达就向线程池里面接受数据,由线程池来处理接受到的数据,关键是 我的数据包如果不按照顺序发送就会出问题。现在线程池里面的任务可能还没处理完,下一个包来了 但是这个包可能是下下个数据包,并不是我想要的顺序,这怎么弄?数据包会被截断,数据会沾包。
有谁有思路没的。。。。不用线程池就没问题!

------解决方案--------------------
事件触发线程与你的事件处理线程池使用“同步”机制,事件触发线程可能产生事件太快,让它等待一下,待事件处理线程池处理完事件触发线程本次收集的事件后,再继续触发下一批事件
事件触发线程收集一批事件(放入事件队列中),唤醒并等待事件处理线程池把这批事件消费完,事件队列为空后,事件处理线程池必然阻塞,事件触发线程被唤醒,继续解决事件,。。。