Цитата:
|
MallSerg,
Я понимаю о чем ты говоришь, у взрослых дядек это называется Ъ-параллелизм vs конкурентность. Кэп нам подсказывает, что один процессор не может в реальном времени производить одновременно несколько вычислений, мы это можем имитировать, епт, дальше что? |
Дальше идет механизм блокировок IO и прочие
Факт в том что операции ввода вывода блокируют выполнение потока т.е. само приложение останавливает свою работу пока операция ввода вывода не вернет результат при чем не важно что это за операция чтения файла с диска или запрос к базе данных или де передача управления драйверу который рисует картинку на экране |
MallSerg,
Я упомянул в своем стартовом посте об асинхронности, но асинхроность означает лишь то, что не блокируется основной луп, далее, эти запросы обрабатывается в порядке очереди. А клиенту интересно не только отправить запрос, но и получить ответ на него. Если какой-то из запросов обрабатывается, скажем, 10 секунд, все остальные будут ждать (чего, к слову, не происходит в многопоточных средах). |
petya, стандартный сценарий:
два пользователя пришли на сервер за данными, нода послал запрос в БД и если для второго пользователя данные пришли раньше, то он их раньше и получит. Но верно замечено, что если пользователю нужно посчитать число P до какой то невероятной точности, то он просто залочит поток и остановит очередь, вывод: не использовать ноду где нужны сложные вычисления или разбивать их на части и делать постепенно. Следует заметить, что некоторое подобие потоков можно сделать на основе генераторов, но все таки, если нужны сложные операции с числами или еще чего, то нода плохой вариант. Т.е. ноду хорошо использовать как прокси: проверил права доступа, сходил в базу, отдал данные или результат шаблона с данными, а большинство типичных веб-проектов в эту схему как раз и входят. |
Цитата:
Многопоточность это абстракция которая скрывает от пользователя тот факт что по сути выполняется один поток команд в который вносятся дополнительные команды(прерывания) и создаются виртуальные потоки создается впечатление что это разные независимые потоки хотя в реальности это не так называется это вытесняющей многозадачностью |
Асинхронное программирование это такой подход который позволяет избегать блокировок выполнения программы связанных с внешними вызовами т.е. придерживаясь определенных правил можно заметно обычно в разы ускорить восполнение программы.
но у этого подхода также есть множество минусов =(. |
Цитата:
Асинхронность это не панацея это просто набор правил которые призваны защитить от излишних блокировок выполнения программы так же такой подход позволяет заметно экономить ресурсы системы. Как следствие написание программ заметно усложняется возникает ад обратных вызовов такие программы почти невозможно распаралелить и сложно отлаживать. Программы/скрипты которые избегают блокировок очень отзывчивы и как правило не заблокированны. Все это элементарно проверяется простыми тестами. |
Цитата:
petya, тебе уже сказали, и не раз, но я на всякий случай повторю, больше для других, кто тему читать будет - нода умеет держать одновременно кучу коннектов, может ждать ответа от базы для одного и одновременно что-то делать для другого, но, разумеется, вычисления проводить в обработчике запроса не надо - это заблочит всех. |
Цитата:
|
Часовой пояс GMT +3, время: 14:53. |