Вытесняющая параллельность

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

Но вот третьего дня, запустив на конвертацию фильм при помощи Xvid4PSP, я вдруг вспомнил, что неплохо бы закачать в PSP еще одно голливудское произведение. В принципе, Xvid4PSP разрешает добавлять файлы в очередь на конвертацию или запускать несколько процессов параллельно, однако не всегда все проходит гладко. Нередки случаи, когда в момент перехода от фильма к фильму что-то сбоит и конвертация обрывается. Баг не аппаратный, потому что тот же HandBrake иной раз сутками молотит, процессор и память нагружает не меньше, а проблем никаких. Да и сам Xvid4PSP может трудиться над длинным фильмом часов по десять подряд, не падая и не сбоя. Тогда как с «очередником» нехорошее случается порой минут через сорок.

В общем, не останавливая первую программу, я запустил HandBrake и поручил ему тоже заняться конвертацией. И вот тут произошло странное. Скорость пережима у Xvid4PSP стала резко падать, равно как и уровень загрузки ею процессора в Task Manager’е. И примерно за тридцать секунд первый показатель упал до нуля, а второй до 1-2 процентов. В то же время HandBrake спокойно развил полную скорость и отлично пережал файл. Когда же он завершил задачу, Xvid4PSP снова проснулся, загрузил процессор на привычные 96-98 процентов и завершил начатое.

Честно говоря, я такого безобразия и не припомню. Как-то привык, что даже весьма ресурсоемкие программы «теснятся», если рядом запускается что-то еще. И теперь хочется понять – это пример неправильной оптимизации одного из приложений под многоядерные процессоры, неграмотное программирование или, скажем так, общее место в параллельных вычислениях? На всякий случай уточню, что дело было под XP.