Перейти к содержимому
whiskas

Колекции в луа (unmanaged drive)

Рекомендуемые сообщения

Когда то была идея сделать нормальные коллекции для OC. К примеру как в джаве. Всякие ArrayList, LinkedList, HashMap, TreeSet, ... .

Потом я подумал о том что б сделать эти коллекции с записям данных на диск. Но сами понимаете записывая в 1 файл быстро упрёмся в лимит по ОЗУ. Да и парсить большой файл ради 1 элемента глупо. И тут я нашел интересную штуку под названием unmanaged drive

Сначала я ставился скептически к нему. Думал все равно будет долго и тд. Но позже решил провести тестирование перфоменса

Я решил сначала попробовать записывать в сектора. И увидеть сколько операций можно сделать в 1 секунду.

И результаты меня приятно удивили. Я смог записать в 1280 секторов (1 сектор = 512 bytes) за чуть больше 1 секунды.

unknown.png\

 

Но позже мое тестирование немного огорчило меня. Но все равно этот диск даже с этой проблемной очень быстрый.

Я провел тот же эксперимент, но уже записывал в сектора не по порядку. В предыдущем тесте я записывал в первый сектор потом во второй и тд.

В этом тесте я записываю в 1 потом в 32 потом  64 и потом когда дойду до 1024 возвращаюсь к 2 и тд ... 

unknown.png

В этом случае запись в файл заняло 4 секунды против 1.33. Получается диск, работает приблизительно, как и реальный диск. Где двигать каретку это дорогостоящая операция.

 

Но даже в таком случае перфоманс меня устраивает.

В следующем тесте показывается что чтение быстрее чем запись в 2 раза.

unknown.png

 

Позже я реализовал какую не какую TreeMap. Очень сырую, но сделал для тестирования перфоменса в реальных условиях.

Мапка была сырая с багами и тд. Также и либка что позволяет работать с unmanaged disk тож баганутая и сырая. Но я смог увидеть реальные результаты.

Я записывал в пустую мапку 1000 элементов поочереди. То есть не какой-то putAll механизм. А простой put вызвал 1000 раз.

На запись этих 1000 элементов ушло 43 секунд. Что очень даже неплохо. ~23 элементов в секунду. Притом что это можно ускорить раз в 100 реализовав putAll метод. Далее я попытался прочить 1000 элементов по ключах. И на это ушло 17 секунд.

Также и при тестирование так как код сырой делалось много лишних движений. Без каких думаю все б работало быстрее. И также небыло механизма балансировки дерева что может сильно повлиять на результат

 

Притом прошу заметить что это TreeMap а не HashMap. HashMap был бы в раз 10 точно быстрее.

Выходит что при помощи unmanaged drive мы можем легко обойти 1 тик штрафа при открытии файла. И записывать и читать данные намного быстрее.

Также мы можем хранить данные в них, а не в ОЗУ используя коллекции. Экономя очень много памяти.

 

 

Изменено пользователем whiskas

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в тему...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...