OR>> И один код, построенный по OR>> принципу автомата (машины состояний). Такой сервер и работать быстрее OR>> должен - "контекст процесса" заменяется на "контекст соединения", а OR>> последний переключается сменой одного указателя.
AB> И, кстати, этим пользуются и на больших системах. К примеру, многие AB> web-сервисы написаны как машина состояний и работают AB> в пределах одного процесса/потока. Дык я где-то писал - чем "тяжелее" процессы (в смысле цены смены контекста), тем выгоднее автомат с массивом описателей состояния. А на "больших" системах сейчас процесс - штука дорогая, смена контекста - это ведь не только "обычне" регистры сохранить/восстановить, там же куча всего - таблицы MMU, маски доступа к портам (на x86),... Кеши летят к чертям, после переключения - всё заново.
AB> Да, еще. Hаверное стоит как и в больших системах разделять процессы и AB> потоки. AB> То чем мы пользуемся в РТОС - это потоки (общее адресное пространство).
Не был бы столь категоричен. Если у тебя пара "задач" общается только через сервисы ОС типа семафоров/почтовых ящиков/etc, то *они* не знают - в одном адресном пространстве они или нет.
Если они пользуются для общения и синхронизации только осевыми API, то при реализации того же API, но на процессоре с MMU - физически один и тот же исходный текст "задачи" надо будет назвать уже не "потоком", а "процессом"? Почему? Что поменялось в самой "задаче"?
AB> Один из мейнтейнеров линукса утверждает, что потоки - не нужны. Они для AB> тех, кто не умеет программировать машины состояний. Вполне может быть. Кстати :-)
a) в embedded RTOS нет процессов, есть только потоки b) потоки не нужны, всё делается на машинах состояний
a)+b) => embedded RTOS не нужны, о чём и говорит MP :-)
Только вот дело в том, что с a) я немножко не согласен, см выше. А b) - это в многозадачной ОС, в которой *уже* *есть* процессы, тогда можно сделать WaitForMultipleObjects на сообщения от других процессов, файловые операции и т.д. и дальше разобрать это всё -- сначала switch по источнику сигнала, потом в каждой ветви - вызов шага автомата для каждой подзадачи. В таком случае данный процесс бить на потоки не очень и надо.
А вот если в embedded RTOS "процессов" "не будет", а будут одни только "потоки", то тогда придётся "потокам" выполнять роль "процессов" и в тех "потоках", где это имеет смысл - делать рабоут на автоматах, а не дробить потоки дальше.
wbr,