Я записываю много данных в вывод stdandard и замечаю, что в зависимости от консоли вывода время выполнения программы является переменным. Программа работает медленнее в консоли NetBeans, чем в Windows cmd, например.
Так что я думаю, что запись в stdout заполняет буфер, и запись становится блокированной, когда этот буфер заполнен (вывод на консоль работает недостаточно быстро).
Я воспроизводлю это поведение с помощью программы на Java.
Здесь программа, которая выводит данные.
public class Output {
public static void main(String[] args) {
long start = System.currentTimeMillis();
for (int i = 0; i < 10_000; i++) {
System.out.println("Awesone Output ");
}
System.out.println("Total time : " + (System.currentTimeMillis() - start));
}
}
А вот и программа, которая потребляет данные из вышеуказанной программы
public class StdoutBlocking {
public static void main(String[] args) throws IOException, InterruptedException {
ProcessBuilder processBuilder = new ProcessBuilder("java", "stackoverflowDemo.StdoutBlocking.Output");
processBuilder.directory(new File("C:/Users/me/Documents/NetBeansProjects/tmp/build/classes"));
Process process = processBuilder.start();
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line = null;
String lastLine = null;
while ((line = reader.readLine()) != null) {
Thread.sleep(10);
lastLine = line;
}
System.out.println("done : " + lastLine);
}
}
Я запускаю второй, который запускает вывод и потребляет его вывод.
Без сна программа вывода работает очень быстро и очень медленно.
Так, каков размер этого буфера ??
Это только для моего Любопытства, я не пытаюсь достичь Нечто особенного