Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 连接速度慢会影响网络性能吗?_Java_Performance_Netty - Fatal编程技术网

Java 连接速度慢会影响网络性能吗?

Java 连接速度慢会影响网络性能吗?,java,performance,netty,Java,Performance,Netty,代码-1 new NioServerSocketChannelFactory(Executors.newCachedThreadPool(), Executors.newCachedThreadPool(),WORKER_SIZE) 代码2 OrderedMemoryAwareThreadPoolExecutor executor = new OrderedMemoryAwareThreadPoolExecutor(48, 0, 0, 1, TimeUnit.SECONDS); pipelin

代码-1

new NioServerSocketChannelFactory(Executors.newCachedThreadPool(), Executors.newCachedThreadPool(),WORKER_SIZE)
代码2

OrderedMemoryAwareThreadPoolExecutor executor = new OrderedMemoryAwareThreadPoolExecutor(48, 0, 0, 1, TimeUnit.SECONDS);
pipeline.addLast("executor", new ExecutionHandler(executor));
如果可以从代码1设置IO工作线程池大小(默认值为2*cpu计数),那么在代码2中向管道添加executer(线程池)的目的是什么


IO操作是从工作线程完成的。这是否意味着,连接速度慢或网络不好的客户端会让IO工作线程一直忙到数据完全发送为止?如果是这样的话,增加WORKER_大小可以帮助我防止延迟

您在代码1中添加的线程池用于boss线程和worker线程。boss线程接受连接并将其传递给工作线程进行处理

在代码2中添加的执行器用于处理工作线程读取的消息


连接速度慢不会影响性能,因为您使用的是非阻塞体系结构(NIO)——它在Netty中设置为不阻塞(如果愿意的话可以)

在代码1中添加的线程池用于boss线程和工作线程。boss线程接受连接并将其传递给工作线程进行处理

在代码2中添加的执行器用于处理工作线程读取的消息


慢速连接不会影响性能,因为您使用的是非阻塞体系结构(NIO)——它在Netty中设置为不阻塞(如果愿意的话可以)

慢速连接通常不会影响NIO中的Netty线程(请查看更新说明)

关于Netty服务器内部线程的一些要点

  • 默认情况下,每个服务器端口只有一个Boss线程,并且 将接受连接并将连接移交给工人 线

  • 准确地说:WORKER_SIZE是最大的niower数量 服务器可以具有的可运行性。例如,如果服务器 只有一个连接,那么将有1个工作线程。如果连接数正在增加,并且无法将其分配给下一个工作进程(活动连接>工作进程大小),则将以循环方式将连接分配给工作进程

如果可以从代码1设置IO工作线程池大小(默认值为2*cpu计数),那么在代码2中向管道添加executer(线程池)的目的是什么

如果上游任务处于阻塞状态,则应使用执行处理程序在单独的线程池中执行它们。否则Nio读/写将无法按时工作(延迟?)。我认为有一个执行处理程序将有助于减少延迟,而不是为WORKER\u SIZE设置大值

IO操作是从工作线程完成的。这是否意味着,连接速度慢或网络不好的客户端会让IO工作线程一直忙到数据完全发送为止?如果是这样的话,增加WORKER_大小可以帮助我防止延迟

一般来说,增加WORKER_SIZE>=cpu数量*2没有帮助,因为, NIO是非阻塞的,如果我没有弄错的话,它是CPU密集型的。对于CPU密集型任务,主要选择CPU*2个线程

更新:


NioWorker使用选择器运行一个循环。选择(500ms)以接收OP_读取,选择器。选择带有超时的阻塞调用,如果大多数连接速度较慢,性能可能会降低?。您可以在org.jboss.netty.channel.socket.nio.SelectorUtil.java和test中减少超时

慢速连接通常不会影响NIO中的Netty线程(请查看更新说明)

关于Netty服务器内部线程的一些要点

  • 默认情况下,每个服务器端口只有一个Boss线程,并且 将接受连接并将连接移交给工人 线

  • 准确地说:WORKER_SIZE是最大的niower数量 服务器可以具有的可运行性。例如,如果服务器 只有一个连接,那么将有1个工作线程。如果连接数正在增加,并且无法将其分配给下一个工作进程(活动连接>工作进程大小),则将以循环方式将连接分配给工作进程

如果可以从代码1设置IO工作线程池大小(默认值为2*cpu计数),那么在代码2中向管道添加executer(线程池)的目的是什么

如果上游任务处于阻塞状态,则应使用执行处理程序在单独的线程池中执行它们。否则Nio读/写将无法按时工作(延迟?)。我认为有一个执行处理程序将有助于减少延迟,而不是为WORKER\u SIZE设置大值

IO操作是从工作线程完成的。这是否意味着,连接速度慢或网络不好的客户端会让IO工作线程一直忙到数据完全发送为止?如果是这样的话,增加WORKER_大小可以帮助我防止延迟

一般来说,增加WORKER_SIZE>=cpu数量*2没有帮助,因为, NIO是非阻塞的,如果我没有弄错的话,它是CPU密集型的。对于CPU密集型任务,主要选择CPU*2个线程

更新:


NioWorker使用选择器运行一个循环。选择(500ms)以接收OP_读取,选择器。选择带有超时的阻塞调用,如果大多数连接速度较慢,性能可能会降低?。您可以在org.jboss.netty.channel.socket.nio.SelectorUtil.java和test中减少超时

我可以说boss线程将请求传递给IO工作线程(从大小为:worker_size的池中选择,代码为1)。IO工作线程将读取的消息传递给另一个要处理的线程(在代码2中设置)。我是否可以说boss线程将请求传递给IO工作线程(从大小为:worker_size in CODE-1的池中选择)。IO工作线程将读取的消息传递给另一个线程进行处理(在代码2中设置)。jestan,我很困惑。boss线程将请求传递给IO工作线程。工作线程触发执行处理程序。如果为处理程序设置了执行池,则请求将在不同的线程中进行,以便io工作线程被释放。我说的对吗?杰斯坦,我很困惑。boss线程将请求传递给IO