Здравствуйте, Ikemefula, Вы писали:
I>Потому дотнету навроде как не надо делать сто вызовов мелких функций из ВинАпи, а вместо этого сделать один вызов этой унифицированой платформы.
Теоретически согласен, а по-факту конкретно для IO это не так.
Унутре, например, для асинхронного чтения сокета (даже в самой последней реализации, заточенной под ValueTask-методы) из дотнета унутре вызывается регистрация хенлдера для наследника SocketAsyncEventArgs, затем запуск асинхронной операции.
Т.е., в дотнетную часть вынесено слишком много.
Более того, ручное использование угрёбищного SocketAsyncEventArgs, доступного еще с середины нулевых, всё-равно оказывается эффективней всех новомодных способов, даже которые через VaueTask. ))
Сравнить с node.js, где одна точка входа при инициализации чтения и обратная при получении уже прочтённых данных.
И оба раза пересечение нейтива и VM-среды бесплатное, как в обычных нейтивных вызовах, в отличие от дотнета, где вызов нейтива дорогой, а из нейтива обратно — еще в два раза дороже.
I>Кроме того, куча вещей в Core были переписаны полностью на менеджед, что бы убрать значительную часть нативных вызовов.
А куча, наоборот, была вынесена в нейтив, что слегка ускорило тот же SSL, который сегодня является основной технологией подключения к веб-ресурсам.
В .Net Framework эффективность SSL была ниже плинтуса.
Сейчас тоже всё еще не айс, но я вижу, что ведутся активные работы, т.е. исходники меняются до неузнаваемости от .Net Core 1.x до .Net Core 2.x, до 3.x, до 5.0 и до 6.x
Наверно, это единственный участок .Net Core, который не разрабатывается последовательно, как вся остальная функциональность, а чуть ли не всерьёз пересматривается каждый раз.
(кроме 5.0 -> 6.x, там только вижу добавления к существующей функциональности, но вряд ли нынешняя реализация будет окончательной, т.к. после столь серьезных переделок код обычно попадает в категорию "нового", "сырого" и т.д.)