тема операционные системы, процессы в Unix под псевдопараллелизмом здесь понимается "одновременное" (для пользователя) выполнение нескольких процессов. На самом деле процессы разбиваются на маленькие кусочки при выполнении и переключение между выполнением кусочков различным процессов происходит по CPU burst
Наверно не процессы разбиваются на кусочки, а всем процессам по очереди предоставляется процессор на некоторый промежуток времени (квант).
Что подразумевается под пределами применения? Сколько одновременно процессов можно запустить? Так это определяется системными ресурсами компьютера и целесообразностью решения конкретной задачи на конкретной вычислительной системе. Каждый раз когда переключается контекст, т.е. новому процессу выделяется процессорное время, ОС должна сохранить состояние регистров и стек для предыдущего процесса. Если таких процессов много, то соответственно для каждого такого процесса используется память для хранения стека и регистров и в какой-то момент можно всю ее исчерпать. Кроме того сохранение/восстановление регистров дорогостоящие операции по времени. Опять же если запустить такое количество процессов, что каждый из них не выдаст результат за приемлемое время, то такой параллелизм никому не нужен. Как-то так.
недавно мне вот сказали, что в случае массового обслуживания веб-клиентов многопоточное приложение, у которого по потоку на клиента, на более-менее свежих линуксовых ядрах оказывается как минимум не медленнее, чем state machine в стиле nginx и node.js. а уж если разговор заходит о поддержке кода и интеграции кода одного проекта в другой - то тут state machine очень мощно начинает сливать.
Member
Статус: Не в сети Регистрация: 13.03.2009 Откуда: Новокузнецк
ToSHiC писал(а):
недавно мне вот сказали, что в случае массового обслуживания веб-клиентов многопоточное приложение, у которого по потоку на клиента, на более-менее свежих линуксовых ядрах оказывается как минимум не медленнее, чем state machine в стиле nginx и node.js. а уж если разговор заходит о поддержке кода и интеграции кода одного проекта в другой - то тут state machine очень мощно начинает сливать.
недавно мне вот сказали, что в случае массового обслуживания веб-клиентов многопоточное приложение, у которого по потоку на клиента, на более-менее свежих линуксовых ядрах оказывается как минимум не медленнее, чем state machine в стиле nginx и node.js. а уж если разговор заходит о поддержке кода и интеграции кода одного проекта в другой - то тут state machine очень мощно начинает сливать.
Не верю. На каком количестве клиентов оно не медленнее? И потом, многопоточные приложения упираются не только в производительность процессора, но и в количестве памяти, которое растет пропорционально количеству потоков, в то время как у nginx поток один.
а почему оно, собственно, должно быть сильно медленнее, если блокировки сети/дисков сразу отправляют поток ждать очереди и пропадают накладные расходы на поллинги? да, есть некоторые расходы на переключение контекста, но они не столь велики в современных реализациях потоков. вопрос памяти вообще не стоит - ограничиваешь стек в 500кб, и на 1000 клиентов потребуется всего 500мб памяти, что мелочь. кстати, грамотно реализовать thread pool для работы с диском - тоже не особо очевидная задача. поддержка кода, опять же... но лично мне всё равно больше конечные автоматы импонируют но то я со своими ощущениями, а то крупная контора с работающими проектами
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 13
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения