После доклада на C++ Russia 2017 возник интересный вопрос из зала. Речь о том, что сейчас в SO-5 все сообщения (но не сигналы) доставляются как динамически создаваемые объекты. Т.е. за вызовом send<Msg>(...); скрывается сперва new Msg, а затем уже передача указателя на этот экземпляр во все нужные очереди заявок. Основная причина для того, чтобы так делать в том, что у нас возможно доставка сообщения как режиме 1:1, так и в режиме 1:N. И в случае с 1:N мы либо имеем один динамически созданный экземпляр со счетчиком ссылок, либо были бы вынуждены копировать экземпляр сообщения для каждого получателя (что, имхо, гораздо хуже в общем случае).
Поскольку вызов new -- это дорогая операция, то возникает вопрос, а как можно избежать лишних накладных расходов при интенсивном обмене сообщениями. Сейчас выход в том, чтобы создать нужно количество экземпляров сообщений предварительно (т.е. преаллоцировать), а затем отсылать эти заранее созданные экземпляры.
И вопрос из зала состоял в том, а можно ли для случаев, когда используется только лишь взаимодействие 1:1, сделать такую оптимизацию, чтобы send приводил не к вызову new, а к выполнению move-операции. Т.е., чтобы содержимое сообщения мувилось бы куда-то в очередь получателя без дополнительного new.
В текущей реализации механизма доставки сообщений такой подход с moveable-сообщениями, вероятно, не сделать. Но я обещал подумать на эту тему.
Немного подумал и показалось, что тема интересная. Есть какие-то предварительные соображения на эту тему.
Главный вопрос вот в чем: интересно ли это кому-то, кто следит за SObjectizer-ом и пытается примерить SObjectizer для решения своих задач? Если интересно, то дайте знать. Во-первых, это простимулирует дальнейшие работы в данном направлении. Во-вторых, я смогу выносить на обсуждения варианты, которые приходят в голову. Вы сможете повлиять на то, что и как в SObjectizer заработает.
В общем, если тема moveable-сообщений для взаимодействия 1:1 (а может даже и 1:N) кому-то интересно, то дайте знать. Либо в комментариях к этой заметке (можно в G+), либо по почте eao197 на gmail тчк com или info на stiffstream тчк com, либо со мной можно связаться через FB, LinkedIn или Habrhabr.
Комментариев нет:
Отправить комментарий