Я обрабатываю кучу файлов на диске. Шаблон моей программы подобен чтению файла, обработке данных и записи в другой файл, и снова и снова для всех файлов в каталоге.
В среднем чтение файла занимает около 80 мс, обработка данных - около 700 мс, а запись файла - менее 50 мс. Поэтому я думаю, что если бы я мог непрерывно читать файлы и использовать несколько потоков для их обработки, это сэкономит мне время.
Таким образом, я попытался использовать класс конвейера в TBB для параллелизма моего кода. В основном я создал фильтр чтения и записи для последовательного запуска и фильтр процессов для параллельного запуска. Однако я попытался изменить ntoken и количество потоков, программа работает быстрее, когда я использую только один поток.
Я проверил использование процессора и увидел, что только одно ядро было занято, хотя я использовал несколько потоков. Так может кто-нибудь сказать мне, что происходит не так?