我正在编写一个必须生成数千个网络请求的实用程序.每个请求只接收一个响应的小数据包(类似于ping),但可能需要几秒钟才能完成.处理每个响应在一个(简单)代码行中完成.
这样做的最终结果是计算机不受IO限制,受文件系统限制或受CPU限制,它仅受响应延迟的约束.
这类似于,但不一样有一种方法可以确定理想的线程数?和Java最好的方法来确定最佳线程数[重复] ...主要的区别是我只受延迟的约束.
我正在使用一个ExecutorService对象来运行线程和一个Queue<Future<Integer>>跟踪需要检索结果的线程:
ExecutorService executorService = Executors.newFixedThreadPool(threadPoolSize);
Queue<Future<Integer>> futures = new LinkedList<Future<Integer>>();
for (int quad3 = 0 ; quad3 < 256 ; ++quad3) {
for (int quad4 = 0 ; quad4 < 256 ; ++quad4) {
byte[] quads = { quad1, quad2, (byte)quad3, (byte)quad4 };
futures.add(executorService.submit(new RetrieverCallable(quads)));
}
}
Run Code Online (Sandbox Code Playgroud)
...然后我将队列中的所有元素出列,并将结果放入所需的数据结构中:
int[] result = int[65536]
while(!futures.isEmpty()) {
try {
results[i] = futures.remove().get();
} catch (Exception e) {
addresses[i] = -1; …Run Code Online (Sandbox Code Playgroud) 是否可以将NIO与System.in一起使用?
我想以某种方式将'stdin'视为可选择的频道.有没有人找到办法做到这一点?