gpt4 book ai didi

java - ThreadPool 执行器和大量客户端同时连接

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:46:15 26 4
gpt4 key购买 nike

我正在使用套接字在 Java 上构建客户端-服务器应用程序。据我所知,为每个连接的客户端创建一个线程太昂贵了。相反,我们可以使用 ThreadPool Executor。如并发documentation中所说我们可以创建一个固定大小的线程池。

class NetworkService implements Runnable {
private final ServerSocket serverSocket;
private final ExecutorService pool;

public NetworkService(int port, int poolSize)
throws IOException {
serverSocket = new ServerSocket(port);
pool = Executors.newFixedThreadPool(poolSize);
}

public void run() { // run the service
try {
for (;;) {
pool.execute(new Handler(serverSocket.accept()));
}
} catch (IOException ex) {
pool.shutdown();
}
}
}

似乎我们最多有 poolSize 个线程在每个时间点运行。但是,如果我们需要维护的连接数超过 poolSize 怎么办。它将如何运作?

最佳答案

如果您真的要拥有大量的客户端,您应该考虑使用NIO,因为为每个客户端创建线程的成本太高。

NIO 使用选择器和 channel ,不需要为每个连接创建新线程。参见 image .

你听说过netty吗? ?我不知道你要实现什么,但看起来它会很有用。

关于java - ThreadPool 执行器和大量客户端同时连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26957369/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com