Обновил AniDB tool, консольную утилиту для хеширования и добавления аниме на anidb.
Из интересного в обновлении добавилось распараллеливание работы. Медленных точек в программе три: таймауты AniDB (команды не чаще, чем раз в 2 секунды), чтение диска и вычисление хеша. Последнее – нагрузка на процессор.
С таймаутами AniDB сделать ничего не получится. Чтение диска тоже, в общем, не ускоришь, единственное, что можно сделать – это устранить любые промедления. Как только один кусок считывается, сейчас же надо начинать читать другой.
Для этого хеширование, обычно отнимающее примерно 30% времени, было вынесено из главного потока. Сам по себе MD5 вычисляется строго последовательно и параллелится очень плохо, однако хеш ED2k, который использует анидб, хоть и основан на MD5, но файл в нём разбивается на кусочки, каждый из которых хешируется, а потом от всех хешей берётся хеш. Поэтому хеширующих потоков можно сделать несколько.
К сожалению, так можно максимум устранить те самые 30%, поскольку чтение с диска всё равно никуда не денется.
Если здесь есть программисты, интересно, есть ли у кого-нибудь ещё какие-нибудь идеи, как процесс можно ускорить?