0

我正在用 Java 编写一个程序,它必须对同一服务器上的各个页面进行大约 650 万次调用(通过附加将从文本文件中读取的用户名,URL 将略有改变).. 首先我想知道最多这样做的时间有效的方式,其次,任何人都可以猜测这可能会消耗多少时间?目前我正在阅读 ExecutorService 对象的单独线程中的每个 url .. 像这样

ExecutorService executor = Executors.newFixedThreadPool(10);
Runnable worker = new MyRunnable(allUsers[n]);
executor.execute(worker);

运行方法如下所示:

is = url.openStream();  // throws an IOException
br = new BufferedReader(new InputStreamReader(is));


while ((line = br.readLine()) != null) {
    page = page + line;

    // More code follows

}

任何建议将不胜感激

4

2 回答 2

0

我同意其他评论和答案,即无法预测这需要多长时间,并且“批量传输”请求很可能会提供更好的性能。

还有几点:

  • 如果您可以使用返回 JSON 或 XML 而不是网页的 RESTful API ......那会更快。

  • 在客户端,如果您要获取的文档很大,这将是有效的:

        while ((line = br.readLine()) != null) {
            page = page + line;
        }
    

    这将进行大量的复制。更好的方法是:

        StringBuilder sb = new StringBuilder(...);
        while ((line = br.readLine()) != null) {
            sb.append(line);
        }
        page = sb.toString();
    

    如果您可以很好地估计页面大小,则创建StringBuilder那个大的。

于 2014-08-09T16:11:11.230 回答
0
  • 不,没有人能猜到这会消耗多少“时间”。我们不知道服务器是否需要一毫秒或一小时来完成请求。

  • 最有效的方法是使用更高效的 API,即允许批量请求的 API。

  • 在 10 个线程时,您的程序可能会受到 IO 限制。您将需要分析确保充分使用 CPU 所需的线程数。您可以使用 Java 7 特性/NIO 框架(如 Netty 或 MINA)来避免这种情况,因此一个线程可以同时处理多个请求。(我不确定这些是否是客户端)。

于 2014-08-09T15:51:45.553 回答