История изменений
Исправление
Legioner,
(текущая версия)
:
Непонятно. 11 миллионов байтов и 5 миллионов строк это числа от 0 до 10 что-ли? Сгенерил 11-мегабайтовый файлик, 4.8 миллионов чисел от 0 до 15. Джава с ограничением в 10 мегабайтов оперативной памяти перемолола такую задачку за 2 секунды. Поставил более реально - от 0 до 2^31-1 100-мегайбайтовый файл (10 миллионов чисел), перемолола (с теми же ограничениями памяти) за 7 секунд. Тормоз этот ваш питон. Хотя такое ощущение, что я мерил скорость жёсткого диска, а не джавы.
Собственно померил - так и вышло. 4 секунды идёт первый этап (чтение по 1 миллиону чисел, сортировка, запись), типичные значения - 94 ms, 84 ms, 201 ms соответственно. Ну и второй этап 3 секунды - там сложно что-то померить отдельно, но в целом, думаю, как раз одну секунду суммарно он сортирует (т.е. грузит процессор) он на первом этапе, 100 мегабайтов читает и 100 мегабайтов пишет. На втором этапе точно так же - 100 мегабайтов читает и 100 мегабайтов пишет, в сумме как раз 3 секунды выходит с практически нулевой загрузкой процессора. Итого полезной работы 1 секунда из 7, остальное на IO тратится.
Исходная версия
Legioner,
:
Непонятно. 11 миллионов байтов и 5 миллионов строк это числа от 0 до 10 что-ли? Сгенерил 11-мегабайтовый файлик, 4.8 миллионов чисел от 0 до 15. Джава с ограничением в 10 мегабайтов оперативной памяти перемолола такую задачку за 2 секунды. Поставил более реально - от 0 до 2^31-1 100-мегайбайтовый файл (10 миллионов чисел), перемолола (с теми же ограничениями памяти) за 7 секунд. Тормоз этот ваш питон. Хотя такое ощущение, что я мерил скорость жёсткого диска, а не джавы.