Существует новая и модная вещь, называемая асинхронными циклами ввода-вывода, параллелизмом передачи сообщений и некоторыми другими модными терминами. Ну, это совсем не ново, но только последние 5 лет мейнстрим обнаружил.
Stackless Python - это версия Python, в которой сама виртуальная машина была модифицирована для лучшей поддержки передачи этих сообщений и циклов ввода-вывода, и ее хитрость - это зеленые потоки / сопрограммы.
Существуют другие библиотеки для того же самого с разными инструментами, например, Витая и Торнадо, на Питоне. Вы даже можете запустить гибридный Twisted на Stackless Python и т. Д.
Бит цикла ввода-вывода напрямую соотносится с тем, как сокеты Berkley выполняют асинхронный ввод-вывод, и с небольшим усилием может быть расширен, чтобы быть проактивным, а не реактивным и работать с файловыми системами, а также с сетевыми сокетами, например новейший ливент.
Для масштабирования в сторону, чтобы использовать более одного ядра, у вас есть два подхода - многопоточность ; общее состояние, например потоки или между процессами - многопроцессорность например. очереди сообщений. Общим ограничением современных архитектур является то, что потоковый подход хорошо работает для большого числа ядер локально, тогда как передача сообщений обгоняет по производительности, поскольку число ядер становится огромным или если эти ядра находятся на разных машинах. И вы можете сделать гибридный подход.
Из-за внутреннего выбора дизайна в Python VM, как правило, он не так эффективен при многопоточности, как многопоточность, поэтому вы переходите к нескольким процессам с передачей сообщений раньше, чем на других платформах.
Но обычно подход с передачей сообщений более понятен, легко корректируется версия.
И есть другие языки, основанные на этом же подходе с другими дополнительными целями и ограничениями, например, Erlang, node.js, Clojure, Go.
Из них Clojure, пожалуй, самый информативный. Когда вы поймете, как работает Clojure, и продумаете почему , цели и ограничения других систем станут на свои места ...