История изменений
Исправление 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, считает хеш и, зная ее номер, вписывает результат в выходной файл. В результате колбасим файл в много потоков без разбиений и склеиваний.