Есть некоторая чистая функция от натурального числа и я хочу применить её к числам от одного до миллиона.
Если сделать это в одном потоке, перебирая числа по порядку, это займёт ~30 секунд. Если же распараллелить всё на четыре потока таким образом, чтобы первый поток обрабатывал числа 1, 5, 9, ..., второй поток числа 2, 6, 10, ... и т.д., время работы программы, вопреки ожиданиям, составит ~45 секунд.
Однопоточная версия, запущенная в отдельном потоке, работает в 4-5 раз медленнее, чем версия вообще без потоков.
Все потоки совершенно независимы, никакой синхронизации, IO не используют. Память используется только на стеке.
Всё написано на чистом C, для многопоточности использую pthreads. Как можно хотя-бы приближённо понять причину такого замедления, желательно без чтения ассамблера?