Я написал программу, которая захватывает и отображает видео с трех видеокарт. Для каждого кадра я создаю поток, который сжимает кадр до Jpeg, а затем помещает его в очередь для записи на диск. У меня также есть другие потоки, которые читают из этих файлов и декодируют их в своих собственных потоках. Обычно это работает нормально, это довольно интенсивная программа, использующая около 70-80 процентов всех шести ядер процессора. Но через некоторое время кодирование внезапно замедляется, программа не может достаточно быстро обрабатывать видео и начинает пропускать кадры. Если я проверю загрузку процессора, то вижу, что одно ядро (обычно ядро 5) больше не работает.
Когда это произойдет, не имеет значения, выйду ли я и перезапущу свою программу. ЦП 5 по-прежнему будет иметь низкую загрузку, и программа немедленно начнет отбрасывать кадры. Удаление всего сохраненного видео тоже не имеет никакого эффекта. Помогает только перезагрузка компьютера. Да, и если я настрою привязку моей программы к использованию всего ядра, кроме полунепрерывного, она будет работать до тех пор, пока то же самое не произойдет с другим ядром. Вот моя установка:
В моем приложении используются:
Мне кажется как будто это какая-то проблема с тем, как Linux планирует потоки на ядрах. Или есть какой-то способ, по которому моя программа может так сильно испортиться, что ее перезапуск не поможет?
Спасибо за чтение, любой ввод приветствуется. Я застрял :)