Йа волосат и бородат!

Узнал тут почему в реализации H323plus под Windows так много потоков. Оказывается в этом богомерзском выродке мысли человеческой aka MS Windows чем больше потоков и кольцевых буферов — тем плавнее отрабатывают эвенты. Поначалу это вызвало у меня недоумение, но потом, после обьяснений Вадима все оказалось очень просто.


Представим, что есть 2 реализации решения некоторой задачи — одна работает в одном потоке с непрерывной обработкой данных, другая — разделена на 2 потока с кольцевым буфером между ними, причем оба потока обрабатывают данные последовательно. В условиях когда для решения задачи число необходимых операций большое, т.е. задача достаточно ресурсоёмкая, вторая реализация будет работать плавнее, как бы странным это ни казалось. А все потому, что в Винде Проклятой используется вытесняющая многозадачность, означающее, что когда Винде вот прям щас понадобилось обработать эвент - активный поток может быть спокойно задвинут... В первом случае это будет означать паузу в работе, а вот второй, разделенный на два потока вариант, возможно, еще порыпается. Поэтому в H323plus так много потоков — ибо там нужна непрерывная обработка данных.


ЗЫ: Для тех, кто будет возникать по поводу незначительности перерыва, пример задачи - декодирование и воспроизведение звука.





@темы: программизм