LINUX.ORG.RU

История изменений

Исправление staseg, (текущая версия) :

Если все упирается в IO, то смысла параллелить нет вообще. Если упираемся в одно CPU при вычислени хэша, то...

Длина md5-хэша константная? Создаем файл заведомо бОльшего размера, чем потребуется (это можно оценить или взять наихудший вариант - размер исходного файла * длина хеша / 2. Пополам, потому что в исходном файле в наихудшем случае будет половина переносов строк, для винды делим на три). В конце процесса мы отрежем лишнее. Конечно исходный и выходной файлы лучше взять в mmap.

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

Исправление staseg, :

Если все упирается в IO, то смысла параллелить нет вообще. Если упираемся в одно CPU при вычислени хэша, то...

Длина md5-хэша константная? Создаем файл заведомо бОльшего размера, чем потребуется (это можно оценить или взять наихудший вариант - размер исходного файла * длина хеша / 2. Пополам, потому что в исходном файле в наихудшем случае будет половина переносов строк, для винды делим на три). В конце процесса мы отрежем лишнее. Конечно исходный и выходной файлы лучше взять в mmap.

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

Исходная версия staseg, :

Если все упирается в IO, то смысла параллелить нет вообще. Если упираемся в одно CPU при вычислени хэша, то...

Длина md5-хэша константная? Создаем файл заведомо бОльшего размера, чем потребуется (это можно оценить или взять наихудший вариант - размер исходного файла * длина хеша / 2. Пополам, потому что в исходном файле в наихудшем случае будет половина переносов строк, для винды делим на три). В конце процесса мы отрежем лишнее. Конечно исходный и выходной файлы лучше взять в mmap.

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