java-nio : send from different thread than selecting

标签 java multithreading server nio throughput

我经常听说,拥有一个负责与客户端的所有通信的线程被认为是“好的设计”。

但是,现在我有多个线程与其他服务器通信以处理客户端请求。

当前设计会将响应排队以发送给选择线程。然后,选择线程将响应出队并将它们发送到适当的客户端。

在我看来,这太愚蠢了。我有大约 30 个线程准备向客户端发送响应,它们都将它们排入队列,并让一个选择线程将它们一一发送。

假设一个封闭的系统,是否没有办法安全地绕过此限制并从与最初接受客户端请求的线程没有(或者如果没有相同)选择器的线程发送?如果是这样,怎么办?

最佳答案

Assuming a closed system, is there no way to safely bypass this limitation

没有这样的限制。您可以从任何您喜欢的线程发送。

and send from a thread that doesn't have a (or if he does not the same) selector as the thread that originally accepted the client request? If so, how?

只需调用SocketChannel.write()。唯一需要将写入写入选择器线程的情况是,如果您收到短写入或零长度写入,在这种情况下,需要为 OP_WRITE 注册 channel 、排队数据等。

关于java-nio : send from different thread than selecting,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40049176/

相关文章:

java - jsp中可以得到变音符号

swift - 数组默认按值传递&线程安全

java - 如何从线程 1 等待直到线程 2 通知

multithreading - 添加额外的内核或 CPU 根本不会提高性能的点在哪里?

java - 检查 JSON 响应是否包含特定值

java - DisplayTag 的动态链接排序不规则

java - JPA 删除查询不起作用

server - 错误:1722 Getting session names

java - 使用 Java 查找范围内所有可用的无线网络

Java 应用程序上传到 Linux 服务器