我正在使用java.nio api编写网络应用程序.我的计划是在一个线程上执行I / O,并在另一个线程上处理事件.但是,要做到这一点,我需要同步读取/写入,以便永不满足竞争条件.
请记住,我需要同时处理数千个连接,同步是否值得,还是应该使用单个线程进行I / O和事件处理?
解决方法:
您正在执行哪种事件处理?可能的瓶颈在哪里?你还有瓶颈吗?
从最简单的实现开始,并在了解瓶颈后优化瓶颈.
如果您发现网络IO线程由于花费太多时间进行事件处理而无法读取足够快的速度,则创建一个缓冲区队列,与之同步,并让事件处理线程通过该队列工作.
您可能想要设置队列大小的限制,以免最终不会耗尽内存.如果网络线程即将超载队列,请等待直到有更多空间.
过早的优化对任何人都不好玩.
但是,要回答您的问题,两个线程之间的同步不太可能成为瓶颈,并且您不必担心其开销.