Re[2]: .Net Core, AppDomain, RPC свой велосипед
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 28.02.17 10:23
Оценка:
Здравствуйте, hardcase, Вы писали:

H>Здравствуйте, Serginio1, Вы писали:


S>>Кто о чем, а вшивый о бане.


S>> Сейчас в .Net Core нет AppDomain и RPC .


H>Я бы использовал Protobuf + как там принято в .NET Core сообщения передавать между процессами. Никакой рефлексии, магии аля MarshalByRefObject и граблей с маршаллингом того, что не предназначено для маршаллинга.


А какая огромная разница между Protobuf и Json?
Для JSON есть прекрасная библиотека

Угу а сервер кто писать будет? Вся прелесть в том, что серверную часть тебе даже писать не надо. А сериализовать объекты тебе так или иначе нужно. А затраты на рефлексию при межпроцессном взаимодействии просто ничтожны.

Да а что тебе не нравится в моей разработке. Почему Protobuf лучше?
Граблей с маршалингом нет, затраты на рефлексию можно не рассматривать при этом все происходит автоматически.

И код мало отличается от работы с объектами напрямую.
и солнце б утром не вставало, когда бы не было меня
Отредактировано 28.02.2017 10:27 Serginio1 . Предыдущая версия .
Re[3]: .Net Core, AppDomain, RPC свой велосипед
От: hardcase Пират http://nemerle.org
Дата: 28.02.17 10:27
Оценка:
Здравствуйте, Serginio1, Вы писали:

S> А какая огромная разница между Protobuf и Json?

S>Для JSON есть прекрасная библиотека

Сообщения протокола известны статически. Непонятно какие типы не уйдут в сеть и не придут внезапно из сети.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[3]: .Net Core, AppDomain, RPC свой велосипед
От: hardcase Пират http://nemerle.org
Дата: 28.02.17 10:29
Оценка:
Здравствуйте, Serginio1, Вы писали:

S>Угу а сервер кто писать будет? Вся прелесть в том, что серверную часть тебе даже писать не надо.


Ну вот тут уже надо смотреть что доступно в корке для общения со внешним миром. Написать один раз TCP-сервер и клиент с пулом соединений не очень трудно.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[4]: .Net Core, AppDomain, RPC свой велосипед
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 28.02.17 10:29
Оценка:
Здравствуйте, hardcase, Вы писали:

H>Здравствуйте, Serginio1, Вы писали:


S>> А какая огромная разница между Protobuf и Json?

S>>Для JSON есть прекрасная библиотека

H>Сообщения протокола известны статически. Непонятно какие типы не уйдут в сеть и не придут внезапно из сети.


Ну опять же тебе нужно писать сервер. При моем подходе писать сервер не надо. Загружаешь нужные сборки и работаешь с ними удаленного.

Я понимаю, что web Api наше все. А как с асинхронными методами, событиями?
и солнце б утром не вставало, когда бы не было меня
Re[4]: .Net Core, AppDomain, RPC свой велосипед
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 28.02.17 10:31
Оценка:
Здравствуйте, hardcase, Вы писали:

H>Здравствуйте, Serginio1, Вы писали:


S>>Угу а сервер кто писать будет? Вся прелесть в том, что серверную часть тебе даже писать не надо.


H>Ну вот тут уже надо смотреть что доступно в корке для общения со внешним миром. Написать один раз TCP-сервер и клиент с пулом соединений не очень трудно.


Так он написан. Через него и происходит общение.

namespace ClientRPC
{

     public enum EnumVar:byte
    {
        VTYPE_EMPTY = 0,
        VTYPE_NULL,
        VTYPE_I2,                   //int16
        VTYPE_I4,                   //int32
        VTYPE_R4,                   //float
        VTYPE_R8,                   //double
        VTYPE_Decimal,              //Decimal
        VTYPE_DATE,                 //DATE (double)
        VTYPE_BOOL,                 //bool
        VTYPE_I1,                   //int8
        VTYPE_UI1,                  //uint8
        VTYPE_UI2,                  //uint16
        VTYPE_UI4,                  //uint32
        VTYPE_I8,                   //int64
        VTYPE_UI8,                  //uint64
        VTYPE_INT,                  //int   Depends on architecture
        VTYPE_CHAR,                 //char
        VTYPE_PWSTR,                //struct wstr
        VTYPE_BLOB,                 //means in struct str binary data contain
        VTYPE_GUID,                 //Guid
        VTYPE_AutoWrap,             // Net Object
        VTYPE_JSObject



    };


    // Класс WorkVariants осуществляет сериализацию и десериализацию объектов
    public class WorkVariants
    {
        internal static Dictionary<Type, EnumVar> MatchTypes;
        
        static WorkVariants()
        {

            // Напрямую сериализуются byte[],числа, строки,булево,Дата,char,Guid
            //Для AutoWrapClient передается индекс в хранилище
            MatchTypes = new Dictionary<Type, EnumVar>()
            { 
                { typeof(Int16),EnumVar.VTYPE_I2 },
                {typeof(Int32),EnumVar.VTYPE_I4 },
                {typeof(float),EnumVar.VTYPE_R4 },
                {typeof(double),EnumVar.VTYPE_R8 },
                {typeof(decimal),EnumVar.VTYPE_Decimal},
                {typeof(bool),EnumVar.VTYPE_BOOL },
                {typeof(sbyte),EnumVar.VTYPE_I1 },
                {typeof(byte),EnumVar.VTYPE_UI1 },
                {typeof(UInt16),EnumVar.VTYPE_UI2},
                {typeof(UInt32),EnumVar.VTYPE_UI4},
                {typeof(Int64),EnumVar.VTYPE_I8},
                {typeof(UInt64),EnumVar.VTYPE_UI8},
                {typeof(char),EnumVar.VTYPE_CHAR},
                {typeof(string),EnumVar.VTYPE_PWSTR},
                {typeof(byte[]),EnumVar.VTYPE_BLOB},
                {typeof(DateTime),EnumVar.VTYPE_DATE},
                {typeof(AutoWrapClient),EnumVar.VTYPE_AutoWrap},
                {typeof(Guid),EnumVar.VTYPE_GUID}//,
             //   {typeof(AutoWrap),EnumVar.VTYPE_JSObject}
            };


        }

     public static DateTime ReadDateTime(BinaryReader stream)
        {
            long nVal = stream.ReadInt64();
            //get 64bit binary
            return DateTime.FromBinary(nVal);


        }

        public static void WriteDateTime(DateTime value,BinaryWriter stream)
        {
            long nVal = value.ToBinary();
            //get 64bit binary
             stream.Write(nVal);


        }
        public static byte[] ReadByteArray(BinaryReader stream)
        {
            var length = stream.ReadInt32();
            return stream.ReadBytes(length);

        }
      public static  object GetObject(BinaryReader stream, TCPClientConnector Connector)
        {
            
            // Считываем тип объекта
            EnumVar type =(EnumVar)stream.ReadByte();

            // В зависмости от типа считываем и преобразуем данные
            switch (type)
            {
                case EnumVar.VTYPE_EMPTY:
                case EnumVar.VTYPE_NULL: return null;
                case EnumVar.VTYPE_I2: return stream.ReadInt16();
                case EnumVar.VTYPE_I4: return stream.ReadInt32();
                case EnumVar.VTYPE_R4: return stream.ReadSingle();
                case EnumVar.VTYPE_R8: return stream.ReadDouble();
                case EnumVar.VTYPE_Decimal: return stream.ReadDecimal();
                case EnumVar.VTYPE_BOOL: return stream.ReadBoolean();
                case EnumVar.VTYPE_I1: return stream.ReadSByte();
                case EnumVar.VTYPE_UI1: return stream.ReadByte();
                case EnumVar.VTYPE_UI2: return stream.ReadUInt16();

                case EnumVar.VTYPE_UI4: return stream.ReadUInt32();

                case EnumVar.VTYPE_I8: return stream.ReadInt64();
                case EnumVar.VTYPE_UI8: return stream.ReadUInt64();
                case EnumVar.VTYPE_CHAR: return stream.ReadChar();
                case EnumVar.VTYPE_PWSTR: return stream.ReadString();

                case EnumVar.VTYPE_BLOB: return ReadByteArray(stream);
                case EnumVar.VTYPE_DATE: return ReadDateTime(stream);
                case EnumVar.VTYPE_GUID: return new Guid(stream.ReadBytes(16));


                case EnumVar.VTYPE_AutoWrap:
                        var Target= stream.ReadInt32();
                        var AW = new AutoWrapClient(Target, Connector);


                    return AW;
              
            }
            return null;
            }


    
        public static bool WriteObject(object Объект, BinaryWriter stream)
        {


            // Если null то записываем только VTYPE_NULL
            if (Объект == null)
            {

                stream.Write((byte)EnumVar.VTYPE_NULL);
                 return true;

            }

            // Если это RefParam то сериализуем значение из Value
            // Нужен для возвращения out значения в Value 
            if (Объект.GetType() == typeof(RefParam))
            {
                object value= ((RefParam)Объект).Value;
                return WriteObject(value, stream);
            }
            EnumVar type;

            // Ищем тип в словаре MatchTypes
            var res = MatchTypes.TryGetValue(Объект.GetType(), out type);


            // Если тип не поддерживаемый вызываем исключение
            if (!res) {

                throw new Exception("Неверный тип " + Объект.GetType().ToString());
                return false;
            }

            // Записываем тип объекта
            stream.Write((byte)type);

            // В зависимости от типа сериализуем объект
            switch (type)
            {
                case EnumVar.VTYPE_I2: stream.Write((Int16)Объект); break;
                case EnumVar.VTYPE_I4: stream.Write((Int32)Объект); break;
                case EnumVar.VTYPE_R4: stream.Write((float)Объект); break;
                case EnumVar.VTYPE_R8: stream.Write((double)Объект); break;
                case EnumVar.VTYPE_Decimal: stream.Write((decimal)Объект); break;
                case EnumVar.VTYPE_BOOL: stream.Write((bool)Объект); break;
                case EnumVar.VTYPE_I1: stream.Write((sbyte)Объект); break;
                case EnumVar.VTYPE_UI1: stream.Write((byte)Объект); break;
                case EnumVar.VTYPE_UI2: stream.Write((UInt16)Объект); break;

                case EnumVar.VTYPE_UI4: stream.Write((UInt32)Объект); break;

                case EnumVar.VTYPE_I8: stream.Write((Int64)Объект); break;
                case EnumVar.VTYPE_UI8: stream.Write((UInt64)Объект); break;
                case EnumVar.VTYPE_CHAR: stream.Write((char)Объект); break;
                case EnumVar.VTYPE_PWSTR: stream.Write((string)Объект); break;

                case EnumVar.VTYPE_BLOB: stream.Write((byte[])Объект); break;
                case EnumVar.VTYPE_DATE: WriteDateTime((DateTime)Объект, stream); break;
                case EnumVar.VTYPE_GUID: stream.Write(((Guid)Объект).ToByteArray()); break;
                case EnumVar.VTYPE_AutoWrap:
                    stream.Write(((AutoWrapClient)Объект).Target);
                    break;
                    
            }
            return true;
        }

    }

   

}
и солнце б утром не вставало, когда бы не было меня
Re[4]: .Net Core, AppDomain, RPC свой велосипед
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 28.02.17 10:32
Оценка:
Здравствуйте, hardcase, Вы писали:

H>Здравствуйте, Serginio1, Вы писали:


S>>Угу а сервер кто писать будет? Вся прелесть в том, что серверную часть тебе даже писать не надо.


H>Ну вот тут уже надо смотреть что доступно в корке для общения со внешним миром. Написать один раз TCP-сервер и клиент с пулом соединений не очень трудно.


Вот здесь я уже писал протокол общения
http://rsdn.org/forum/dotnet/6703738.1
Автор: Serginio1
Дата: 20.02.17
и солнце б утром не вставало, когда бы не было меня
Re[2]: .Net Core, AppDomain, RPC свой велосипед
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 28.02.17 10:32
Оценка:
Здравствуйте, Serginio1, Вы писали:

S>Сил вложено немало. В итоге получилось поделие даже не хуже WCF.


Хуже, причем сильно хуже. Ты просто не понимаешь что такое WCF.
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
AVK Blog
Re[3]: .Net Core, AppDomain, RPC свой велосипед
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 28.02.17 10:32
Оценка:
Здравствуйте, Serginio1, Вы писали:

S> А какая огромная разница между Protobuf и Json?


Производительность.

S>Для JSON есть прекрасная библиотека


Нашел новую игрушку? Увы, но для остальных это не аргумент.

S>Граблей с маршалингом нет, затраты на рефлексию


Затраты на рефлексию, по результатам реальных замеров, это 90% всей работы при передаче по ip. При передаче по более быстрым каналам, особенно по CrossAppDomainChannel цифра вообще близка к 100%.
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
AVK Blog
Re[3]: .Net Core, AppDomain, RPC свой велосипед
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 28.02.17 10:33
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Здравствуйте, Serginio1, Вы писали:


S>>Сил вложено немало. В итоге получилось поделие даже не хуже WCF.


AVK>Хуже, причем сильно хуже. Ты просто не понимаешь что такое WCF.

Которого нет Net Core.

А конструктивная критика?
и солнце б утром не вставало, когда бы не было меня
Re[4]: .Net Core, AppDomain, RPC свой велосипед
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 28.02.17 10:36
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Здравствуйте, Serginio1, Вы писали:


S>> А какая огромная разница между Protobuf и Json?




AVK>Производительность.

При межпроцессном взаимодействии разница ничтожна.
S>>Для JSON есть прекрасная библиотека

AVK>Нашел новую игрушку? Увы, но для остальных это не аргумент.


S>>Граблей с маршалингом нет, затраты на рефлексию


AVK>Затраты на рефлексию, по результатам реальных замеров, это 90% всей работы при передаче по ip. При передаче по более быстрым каналам, особенно по CrossAppDomainChannel цифра вообще близка к 100%.


Угу. При внутрипроссном взаимодействии 500 000 вызовов в секунду
В том же CEF при взаимодействии между JS кодом нативои и .Net Core 60 000 вызовов в секунду.
А по TCP всего 2000 вызовов в секунду.

Вот замеры
Кроссплатформенное использование классов .Net из неуправляемого кода. Или аналог IDispatch на Linux
CEF, ES6, Angular 2, TypeScript использование классов .Net Core. Создание кроссплатформенного GUI для .Net с помощью CEF

http://rsdn.org/forum/dotnet/6703738.1
Автор: Serginio1
Дата: 20.02.17
и солнце б утром не вставало, когда бы не было меня
Отредактировано 28.02.2017 10:46 Serginio1 . Предыдущая версия .
Re[5]: .Net Core, AppDomain, RPC свой велосипед
От: hardcase Пират http://nemerle.org
Дата: 28.02.17 10:37
Оценка:
Здравствуйте, Serginio1, Вы писали:

H>>Сообщения протокола известны статически. Непонятно какие типы не уйдут в сеть и не придут внезапно из сети.


S>Ну опять же тебе нужно писать сервер. При моем подходе писать сервер не надо. Загружаешь нужные сборки и работаешь с ними удаленного.


S>Я понимаю, что web Api наше все. А как с асинхронными методами, событиями?


У меня пока не стоит задача удаленного взаимодействия в .Net Core, но когда встанет, я буду смотреть в сторону Protobuf + MQ фреймворк, типа ZeroMQ или RabbitMQ. Но не исключено, чот сделаю свой велосипед на общей памяти вместо TCP/IP.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[6]: .Net Core, AppDomain, RPC свой велосипед
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 28.02.17 10:44
Оценка:
Здравствуйте, hardcase, Вы писали:

H>Здравствуйте, Serginio1, Вы писали:


H>>>Сообщения протокола известны статически. Непонятно какие типы не уйдут в сеть и не придут внезапно из сети.


S>>Ну опять же тебе нужно писать сервер. При моем подходе писать сервер не надо. Загружаешь нужные сборки и работаешь с ними удаленного.


S>>Я понимаю, что web Api наше все. А как с асинхронными методами, событиями?


H>У меня пока не стоит задача удаленного взаимодействия в .Net Core, но когда встанет, я буду смотреть в сторону Protobuf + MQ фреймворк, типа ZeroMQ или RabbitMQ. Но не исключено, чот сделаю свой велосипед на общей памяти вместо TCP/IP.


Ну с в Net Core вроде обещали поддержку пайпов. Несложно переделать обмен по Tcp/ip. А чем тебе мой варианет не нравится?
и солнце б утром не вставало, когда бы не было меня
Re[4]: .Net Core, AppDomain, RPC свой велосипед
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 28.02.17 11:15
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Здравствуйте, Serginio1, Вы писали:


S>> А какая огромная разница между Protobuf и Json?


AVK>Производительность.

JSON применяется только для круных объектов, чтобы заполнять их на клиенте
Dictionary<int, string> ClientDict = new Dictionary<int, string>()
        {
            [1] = "Один",
            [2] = "Второй2",
            [3] = "Один3"
        };

        var @Dictionary2 = wrap.GetType("System.Collections.Generic.Dictionary`2", "System.Collections");
        var @DictionaryIntString = wrap.GetGenericType(@Dictionary2, "System.Int32", "System.String");

        // Скопируем словарь на сервер
        // Закомментированы различные варианты
        // var dict = connector.CoryTo(@DictionaryIntString, ClientDict);
        // var dict = connector.CoryTo("System.Collections.Generic.Dictionary`2[System.Int32, System.String]", ClientDict);

        // Скопируем словарь на сервер
        var dict = connector.CoryTo(ClientDict);



Для всех остальных обычная бинарная сериализация

 stream.Write((byte)type);

            // В зависимости от типа сериализуем объект
            switch (type)
            {
                case EnumVar.VTYPE_I2: stream.Write((Int16)Объект); break;
                case EnumVar.VTYPE_I4: stream.Write((Int32)Объект); break;
                case EnumVar.VTYPE_R4: stream.Write((float)Объект); break;
                case EnumVar.VTYPE_R8: stream.Write((double)Объект); break;
                case EnumVar.VTYPE_Decimal: stream.Write((decimal)Объект); break;
                case EnumVar.VTYPE_BOOL: stream.Write((bool)Объект); break;
                case EnumVar.VTYPE_I1: stream.Write((sbyte)Объект); break;
                case EnumVar.VTYPE_UI1: stream.Write((byte)Объект); break;
                case EnumVar.VTYPE_UI2: stream.Write((UInt16)Объект); break;

                case EnumVar.VTYPE_UI4: stream.Write((UInt32)Объект); break;

                case EnumVar.VTYPE_I8: stream.Write((Int64)Объект); break;
                case EnumVar.VTYPE_UI8: stream.Write((UInt64)Объект); break;
                case EnumVar.VTYPE_CHAR: stream.Write((char)Объект); break;
                case EnumVar.VTYPE_PWSTR: stream.Write((string)Объект); break;

                case EnumVar.VTYPE_BLOB: stream.Write((byte[])Объект); break;
                case EnumVar.VTYPE_DATE: WriteDateTime((DateTime)Объект, stream); break;
                case EnumVar.VTYPE_GUID: stream.Write(((Guid)Объект).ToByteArray()); break;
                case EnumVar.VTYPE_AutoWrap:
                    stream.Write(((AutoWrapClient)Объект).Target);
                    break;
                    
            }
            return true;


S>>Для JSON есть прекрасная библиотека


AVK>Нашел новую игрушку? Увы, но для остальных это не аргумент.


JSON сериализация нужна для крупных объектов, что бы не заполнять их на сервере.

Если нужна скорость, то вручную сериализуй и десериализуй на сервере. Никто же не запрещает.
Я пока решил для объетов кроме вышеупомянутых не делать автоматическую сериализацию.


S>>Граблей с маршалингом нет, затраты на рефлексию


AVK>Затраты на рефлексию, по результатам реальных замеров, это 90% всей работы при передаче по ip. При передаче по более быстрым каналам, особенно по CrossAppDomainChannel цифра вообще близка к 100%.


Кстати не нашел пайпов для .Net Core. Может плохо искал?
и солнце б утром не вставало, когда бы не было меня
Re[5]: .Net Core, AppDomain, RPC свой велосипед
От: Tom Россия http://www.RSDN.ru
Дата: 28.02.17 11:48
Оценка:
S>Кстати не нашел пайпов для .Net Core. Может плохо искал?
https://docs.microsoft.com/en-us/dotnet/core/api/system.io.pipes ?
Народная мудрось
всем все никому ничего(с).
Re[6]: .Net Core, AppDomain, RPC свой велосипед
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 28.02.17 11:55
Оценка:
Здравствуйте, Tom, Вы писали:

S>>Кстати не нашел пайпов для .Net Core. Может плохо искал?

Tom>https://docs.microsoft.com/en-us/dotnet/core/api/system.io.pipes ?

Ghb добавлении
using System​.IO​.Pipes
ругается на Pipes
В пакетах тоже нет.
Целевая платформа .NetCoreApp1.1
и солнце б утром не вставало, когда бы не было меня
Re[4]: .Net Core, AppDomain, RPC свой велосипед
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 28.02.17 12:57
Оценка:
Здравствуйте, Serginio1, Вы писали:

AVK>>Хуже, причем сильно хуже. Ты просто не понимаешь что такое WCF.

S> Которого нет Net Core.

Тем не менее это не повод говорить, что твой полурабочий велосипед лучше.

S> А конструктивная критика?


Для конструктивной критики надо разбираться, а на это сейчас у меня нет ни времени, ни желания.
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
AVK Blog
Re[5]: .Net Core, AppDomain, RPC свой велосипед
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 28.02.17 12:57
Оценка:
Здравствуйте, Serginio1, Вы писали:

AVK>>Производительность.

S> При межпроцессном взаимодействии разница ничтожна.

Как раз при межпроцессном разница огромна, потому что каналы очень быстрые и с минимальной латентностью.

S> Угу. При внутрипроссном взаимодействии 500 000 вызовов в секунду


А латентность?

S>А по TCP всего 2000 вызовов в секунду.


Ты просто не умеешь его готовить.
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
AVK Blog
Re[7]: .Net Core, AppDomain, RPC свой велосипед
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 28.02.17 12:57
Оценка: 16 (1)
Здравствуйте, Serginio1, Вы писали:

S>Ghb добавлении

S>using System?.IO?.Pipes
S> ругается на Pipes

Assembly
System.IO.Pipes.dll

... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
AVK Blog
Re[5]: .Net Core, AppDomain, RPC свой велосипед
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 28.02.17 12:59
Оценка:
Здравствуйте, Serginio1, Вы писали:

S>Ну опять же тебе нужно писать сервер.


Не знаю что ты там понимаешь под сервером, но tcp сервер пишется на дотнете в одно выражение.
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
AVK Blog
Re[6]: .Net Core, AppDomain, RPC свой велосипед
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 28.02.17 14:04
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Здравствуйте, Serginio1, Вы писали:


AVK>>>Производительность.

S>> При межпроцессном взаимодействии разница ничтожна.

AVK>Как раз при межпроцессном разница огромна, потому что каналы очень быстрые и с минимальной латентностью.


S>> Угу. При внутрипроссном взаимодействии 500 000 вызовов в секунду


AVK>А латентность?


S>>А по TCP всего 2000 вызовов в секунду.


AVK>Ты просто не умеешь его готовить.


Так вот я и спрашиваю как? Никто не отвечает
и солнце б утром не вставало, когда бы не было меня
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.