Мне нужно написать не очень большую программу на С++, используя boost:: thread.
Проблема заключается в обработке большого (может быть, тысяч или десятков тысяч), а также количества (возможно) больших файлов. Каждый файл независим от другого, и все они находятся в одном каталоге. Я думаю об использовании многопоточного aproach, но вопрос в том, сколько потоков я должен использовать? Я имею в виду, какой порядок величины? 10, 500, 12400?
Есть некоторые проблемы синхронизации, каждый поток должен возвращать структуру значений (которые накапливаются для каждого файла), и они добавляются в "глобальную" структуру для получения общих данных. Я понимаю, что некоторые потоки могут "проголодаться" из-за синхронизации, но если это только операция добавления, имеет ли это значение?
Я думал о
for(each file f in directory){
if (N < max_threads)//N is a static variable controlling amount of threads
thread_process(f)
else
sleep()
}
Это в HP - UX, но я не буду тестировать его часто, поскольку это удаленный и совершенно недоступный сервер.