Dmitri Kuzmenko wrote:
Но это всё ещё не то, чего хочется. Сейчас проблема в том, что
суперсервер
из за кривизны кода плохо параллелится по разным потокам.
он вообще не параллелится, и не из-за кривизны, а из-за архитектуры.
Насколько я помню из времён ковыряния к коде FB1.0 там
1) кооперативная многозадачаность. FB сам переодически переключается на
другой запрос.
2) много глобальных переменных.
3) блокировки
4) нереентабельный код.
В принципе на истинный параллелизм можно и забить, если бы кооперативная
многозадачность работала бы более качественно.
Давайте сделаем такую архитектуру: гибрид классика и супера.
ты бы пару лет назад это написал. А теперь уже поздно.
"Никогда не поздно". Если посмотреть на перспективу, то даже если
суперсервер будет идеально параллелиться по ядрам, то полезно было бы
иметь возможность запускать несколько его процессов для:
1) надёжности от программных сбоев
2) загребания большего количества памяти (32бит лимит)
3) перспектив кластеризации и работы а железе где нет глобальной SMP.
с какого буя? С приоритетами уже баловались, на классике.
Запускаем на супере:
1) тяжёлый долгоиграющий запрос
2) в другом коннекте пускаем сверхкороткий.
В результате скорость отклика на короткие запросы существенно падает.
Для тяжёлого запроса пофиг сколько он будет выполняться 1 минуту, или 2.
А для коротких скорость отклика критична.
Поэтому введение приоритета явного или неявного напрашивается.