Проблема такая. Читаю из файла в буферы (всего их пять) - это первая нить. Выполняю над ними 2 операции - это еще две нити. Т.е. буфер один заполнился, разрешается первая операция, после нее вторая и т.д. Блокировки буферов с помощью семафоров.
Но получается, что время тратится значительно больше, чем, если бы это выполнялось в одном потоке.
Параллельность в том, что много буферов. Операции над ними разделены на три части. У всех трех операций разное время выполнения. Т.е., чем больше буферов, тем в сумме быстрее. Понятно, если буфер один, то ничего не улучшается.
После работы с первой операцией, буфер доступен для второй, но первая операция продолжается с другим буфером и т.д.
И в таком духе. Если прикинуть на бумаге получается офигенно быстро.
ну тогда осталось догадаться прикинув на бумаге, что проц не резиновый, и выигрыш получится(небольшой) только когда все будет упираться не в проц а в ввод-вывод... типа dd if=/dev/hda | обрабатывалка >/dev/null ;)
это я к тому, что вывод не количеством буферов определяется, а тем, что один поток может что-то делать пока другой висит ожидая внешних событий, напр ввода-вывода.
то-есть сколько времени его "снаружи" продержали, столько и выигрыш.
реальный выйгрыш будет если у тебя будет много процессоров
и еще у тебя выйгрыш будет расти после того как последний обработчик
начнет работать над первым буфером. Тобиш если пять обработчиков то
нормальный режим SMP появится после начала работы пятого.