Я написал простую программу, как показано, которая просто генерирует случайный символ и печатает этот символ в файле. Это продолжается бесконечно, пока программа не прекратится.Я получаю разные скорости записи файлов для подобных программ. Как?
Я сделал эти 3 аналогичные программы с незначительной разницей в тексте, но огромная практическая разница.
import java.util.Random;
import java.io.PrintStream;
import java.io.File;
import java.io.FileNotFoundException;
public class RandomCharInfinity
{
public static void main(String[] args) throws FileNotFoundException
{
PrintStream save = new PrintStream(new File("virus.txt"));
Random r = new Random();
while(true)
{
save.print((char)(r.nextInt(26)+'a'));
}
}
}
Этот код сгенерировал файл virus.txt размером 45 МБ всего за 30 секунд.
import java.util.Random;
import java.io.PrintStream;
import java.io.File;
import java.io.FileNotFoundException;
public class RandomCharInfinity
{
public static void main(String[] args) throws FileNotFoundException
{
PrintStream save = new PrintStream(new File("virus.txt"));
Random r = new Random();
while(true)
{
save.print((char)(r.nextInt(26)+'a'));
save.print((char)(r.nextInt(26)+'a'));
save.print((char)(r.nextInt(26)+'a'));
save.print((char)(r.nextInt(26)+'a'));
save.print((char)(r.nextInt(26)+'a'));
save.print((char)(r.nextInt(26)+'a'));
save.print((char)(r.nextInt(26)+'a'));
save.print((char)(r.nextInt(26)+'a'));
save.print((char)(r.nextInt(26)+'a'));
save.print((char)(r.nextInt(26)+'a'));
}
}
}
Этот код сгенерировал файл virus.txt размером около 15 мб за 30 секунд.
import java.util.Random;
import java.io.PrintStream;
import java.io.File;
import java.io.FileNotFoundException;
public class RandomCharInfinity
{
public static void main(String[] args) throws FileNotFoundException
{
PrintStream save = new PrintStream(new File("virus.txt"));
Random r = new Random();
char ch = (char)(r.nextInt(26)+'a')
while(true)
{
save.print(ch);
}
}
}
Этот файл также генерирует virus.txt с 15 МБ за 30 секунд.
Теперь мой вопрос: в последней программе я беру один случайный символ и просто печатаю его бесконечно.
В средней программе, я печатаю 10 случайных символов за один раз с одной проверкой цикла.
В первой программе, я печатаю случайный символ, и каждый раз, когда я должен проверять цикл while.
Почему эти программы отличаются друг от друга размерами и что тоже огромная разница?
Как вы измерить пропускную способность? –
Все три программы должны иметь довольно идентичную производительность. Как вы измеряете? –
Я собираюсь использовать «случайные различия в кешировании ОС». – chrylis