我正在使用java.nio api编写网络应用程序。我的计划是在一个线程上执行I / O,并在另一个线程上处理事件。要做到这一点,我需要同步读/写,以便永远不会遇到竞争条件。
请记住,我需要同时处理数千个连接,值得同步,还是应该使用单个线程进行I / O和事件处理?
答案 0 :(得分:3)
你在做什么样的事件处理?可能的瓶颈在哪里?你甚至有瓶颈吗?
从最简单的实施开始,一旦你知道它们就会优化掉瓶颈。
如果您发现网络IO线程的读取速度不够快,因为它花费了太多时间进行事件处理,那么创建一个缓冲区队列,与之同步并让事件处理线程在队列中工作。
您可能希望设置队列大小的限制,以便最终不会耗尽内存。如果网络线程即将溢出队列,请等待,直到有更多空间。
过早优化并不适合任何人。
但是,要回答你的问题,两个线程之间的同步可能不会成为瓶颈,你不应该担心它的开销。
答案 1 :(得分:0)
我认为它的效率取决于同步部分的粒度。