我正在使用java.nio api编写网络应用程序。我的计划是在一个线程上执行I / O,并在另一个线程上处理事件。但是,要做到这一点,我需要同步读取/写入,以便永不满足竞争条件。

请记住,我需要同时处理数千个连接,同步是否值得,还是应该使用单个线程进行I / O和事件处理?

最佳答案

您正在执行哪种事件处理?可能的瓶颈在哪里?你甚至有瓶颈吗?

从最简单的实现开始,并在了解瓶颈后优化瓶颈。

如果您发现网络IO线程由于花费太多时间进行事件处理而无法读取足够快的速度,则创建一个缓冲区队列,与之同步,并让事件处理线程在该队列中工作。

您可能想要设置队列大小的限制,以免最终不会耗尽内存。如果网络线程即将超载队列,请等待直到有更多空间。

过早的优化对任何人都不好玩。

但是,要回答您的问题,两个线程之间的同步不太可能成为瓶颈,并且您不必担心其开销。

09-26 15:56
查看更多