Асинхронность JS, имхо, являтся половинчатым решнием. Если я правильно понимаю, она избавляет нас только от одного — от бесполезного простоя машины: машина не ждет, когда закончится блокирующая операция, она все время занята. Однако, это не избавляет от ожидания самого пользователя: если машина занята, она блокирует единственный поток, и не реагирует на события своевременно (ставит их в очередь).
Тут очевидным решением кажется то, что все действия, которые запрашивает пользователь, выполняются на другой машине, или нескольких машинах, а основной событийный поток заниматеся только диспетчерзацией: принимает события инициированные пользователем и отправляет их на свободную машину или в очередь, на обработку, а также принимает события, инициированные машинами-обработчиками — результаты вычислений, и выводит. Принимающая машина тоже может быть диспетчером.
Такая архитктура, мне кажется, самоочевидна. Это напоминает модель акторов, вроде. Однако, я не вижу, чтобы это активно применялось. Почему?
Что касается тредов, нитей и прочих подобных вещей, мне это тоже не очень нравится, хотя, я не в теме, честно говоря, но при такой архитектуре очвидны, как минимум, 2 проблемы: падние производительности на больших нагрузках и дедлоки. Это все ведет к эскалации сложности и глючности систем.
Собственно вопрос: почему так называемые «архитекторы» не пошли по простому и очевидному пути? Тут снова мы сталкивамся с математикой головного мозга компьютер-сайентологов, которые думали, что волшебные лямбды избавят их от проблем масштабируемости, или это просто тупость?