Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #71, ОКТЯБРЬ 2006 г.

как сделать из слона муху

ФЛЕНОВ МИХАИЛ AKA HORRIFIC

Спецвыпуск: Хакер, номер #071, стр. 071-048-3


Теперь нужно использовать буфер 1, а буфер 2 помещаем в очередь. Так как MMSystem работает в отдельном потоке, ждем, когда буфер 1 освободится. Когда это произойдет, система переключится на следующий буфер в очереди (буфер 2), и пока она будет с ним работать, мы освобождаем буфер 1 или заполняем его новыми данными и снова помещаем в очередь. Таким образом, с помощью цикла можно по частям обработать данные любого размера с минимальными расходами памяти.

Два буфера в данном случае минимально необходимы, но желательно использовать 3 или 4. Дело в том, что в момент освобождения буфера система может быть занята и не успеет его очистить, подготовить и вернуть обратно в очередь. В этом случае может произойти заикание в воспроизведении или даже сбой, если идет запись.

[слабое место.]

Когда данных очень много, то даже для очень мощного процессора просматривать их все очень сложно и проблематично. Дело в том, что процессор – не самое главное в современном компьютере. Слабым местом по-прежнему остается жесткий диск. Это механика и, не смотря на то, что производители пытаются из нее выжать максимум, она остается очень слабой.

Можно попытаться оптимизировать процесс поиска данных через дефрагментацию, дабы головка жесткого диска не прыгала по блину как угорелая, а читала их последовательно, но затраты в соотношении с результатом слишком большие. Можно читать данные большими кусками, а обработку перенести в отдельный поток, чтобы максимально распараллелить задачи, но это тоже не совсем то.

Если данных действительно очень много, а памяти очень мало, в бой вступают мозги и алгоритмы. Мы должны реализовать алгоритм так, чтобы не было необходимости просматривать все данные. И в этом нам помогут сортировка и индексация.

[сортировка.]

Когда данные упорядочены, с ними проще работать и искать необходимую информацию. Допустим, что есть список всех жителей города, а тебе нужно найти в нем номер телефона Иванова. С такой фамилией в целом городе может быть не один человек, а сотня. Просматривать весь список достаточно проблематично, а если он будет упорядочен по фамилиям, то достаточно будет просмотреть все записи на букву «И» и готово. Реальная экономия времени и памяти.

[индексация.]

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

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

Назад на стр. 071-048-2  Содержание  Вперед на стр. 071-048-4