многопоточность и чтение из одного файла (perl) - PullRequest
0 голосов
/ 03 октября 2011

Эй, острые умы!

Мне нужно ваше экспертное руководство для принятия некоторых решений.

Ситуация такая: 1. У меня ок. 500 плоских файлов, содержащих от 100 до 50000 записей, которые необходимо обработать. 2. Каждая запись в файлах, упомянутых выше, должна быть заменена значением из отдельного огромного файла (2-15 ГБ), содержащего 100-200 миллионов записей.

Так что я подумал сделать обработку с использованием многоядерности - один файл на поток / разветвление.

Это хорошая идея? Так как каждый поток должен читать из одного огромного файла? Это небольшая проблема с загрузкой в ​​память? Использование file :: tie является опцией, но это работа с потоками / вилками?

Нужен ваш совет, как поступить.

Спасибо

1 Ответ

2 голосов
/ 03 октября 2011

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

Кроме того, поскольку вы собираетесь читать только этот большой файл, tie должно работать идеально.Я не слышал о проблемах с этим.Но если вы собираетесь искать этот большой файл для каждой записи в ваших меньших файлах, то я думаю, что это займет у вас много времени, несмотря на количество потоков, которые вы используете.Если данные из большого файла могут быть проиндексированы на основе какого-либо ключа, я бы посоветовал поместить их в некоторую базу данных NoSQL и получить к ней доступ из вашей программы.Это, вероятно, ускорит вашу задачу даже больше, чем использование нескольких потоков / ядер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...