LINUX.ORG.RU

История изменений

Исправление raspopov, (текущая версия) :

Может быть сделать так?

Поток 1 читает кадр и кладёт в очередь кадров на сжатие в поток 2, который сжимает и кладёт две копии кадра в очереди потоков 3 и 4, которые занимаются отправкой кадров по сети и на диск соответственно.

Мьютексы свои у каждой очереди и они будут блокироваться только на время изменения указателя на голову очереди, это даже можно сделать на атомиках (очередь хранит адреса памяти, где кадр лежит, для быстроты доступа лучше сделать пул памяти).

В этом случае код хорошо масштабируемый и изолированный друг от друга. Профилировать будет легко - просто смотреть размер очередей. Поток 2 потом засунуть в CUDA или типа того.

Исходная версия raspopov, :

Может быть сделать так?

Поток 1 читает кадр и кладёт в очередь кадров на сжатие в поток 2, который сжимает и кладёт две копии кадра в очереди потоков 3 и 4, которые занимаются отправкой кадров по сети и на диск соответственно.

Мьютексы свои у каждой очереди и они будут блокироваться только на время изменения указателя на голову очереди, это даже можно сделать на атомиках (очередь хранит адреса памяти, где кадр лежит, для быстроты доступа лучше сделать пул памяти).

В этом случае код хорошо масштабируемый и изолированный друг от друга. Поток 2 потом засунуть в CUDA или типа того.