Здравствуйте, SkyDance, Вы писали:
V>>Многозадачность может быть и кооперативной.
SD>Поэтому я и написал "вытесняющая". Для С++ кооперативная, мягко говоря, не реализована.
В виндах 2.x-3.х была реализована на библиотечном уровне API Windows.
По нынешнему состоянию конкретно в языке — давно реализована в
Бусте на библиотечном уровне и
частично в 20-м стандарте С++ на уровне компилятора.
V>>Более того, для NUMA противопоказана вытесняющая многозадачность.
SD>Другой в С++ нормально не воспользуешься.
Кооперативную многозадачность оставили в Windows в виде API фиберов.
Там всегда было достаточно небольшой плюсовой обертки над этим делом, чтобы удобно юзать из кода.
V>>Immutability хорошо работает разве что для разделяемой по SMP памяти.
SD>Возможно, у нас разное понимание immutability.
В этом рассуждения я рассматривал с т.з. вычислительной модели железа — при доступе только по чтению не происходит нагрузка на механизм когерентности памяти в SMP.
SD>Если синхронизация (общение, вызовы процедур, events и т.п.) сделана через message passing, то там уже по определению immutability — ибо сообщения есть копии данных.
Ну вот как раз с техникой immutability в SMP не обязательно глубоко копировать данные, можно передавать ссылку на них.
V>>Так шта, будущее мейнстрима за кластерами, составленными из узлов SMP, тут я могу забиться на произвольнейшую сумму. ))
SD>Это скорее настоящее, чем будущее.
Сегодня кластерные вычисления являются экзотикой, соответствующая их поддержка языками и тулзами убога — на уровне протухшего линухового fork.
Это должно быть в шаговой доступности, примерно как в шаговой доступности стали однажды в юниксах доступны потоки через POSIX Thread (pthread) стандарт.
Я ведь еще помню времена, когда создавал потоки в юниксах через аналог fork —
clone (указываешь уровень изолированности процесса — шарить общую память, это и были юниксовые потоки когда-то).
SD>Просто чем дальше кластеры друг от друга (в пределе — на другом континенте)
Не-не-не.
Сама суть кластерных вычислений — эффективное объединение ресурсов.
Имено поэтому физическое расстояние м/у кластерами играет рояль.
В пределе — на одном кристалле.
SD>тем более важными становятся вопросы асинхронного общения
Это вопросы имеют такую же важность и при наносекундных задержках, т.е. с т.з. синхронизации абсолютная величина задержек не принципиальна.
SD>восстановления при недоступности ну и вообще distributed computing.
Плюсам до фени, как и сям, бо поверх низкого уровня можно накрутить высокий.
Была и есть такая операционка QNX, она бодро умела создавать процессы одинаково что на локальном хосте, что на удалённом.
Общение с родительским процессом через стандартные в посиксе пайпы.
Дальше дело техники накрутить типизированное общение по каналу на том же С++ через сериализацию-десериализацию сообщений.
SD>Где С++ совсем уж плох. Однако ж до сих пор особо упорные именно С++ и двигают как "язык для создания микросервисов", и даже кивают в сторону всяких там Яндексов. Не понимая, что первичны там не свойства языка, а незнание инженерами более высокоуровневых подходов.
Эти высокоуровневые подходы унутре всё-равно на плюсах реализуют. ))