Какова причина использования контекста zeroMQ?

Во время ковыряния вокруг zeroMQ (Очень полезная замена сокета для тех, кто не знает), я наткнулся на этот вопрос в списке рассылки:

Использование нескольких контекстов: есть ли обратная сторона использования нескольких контекстов?

Есть ли недостатки в использовании нескольких контекстов? У меня есть оболочка класса, которую я хотел бы сделать максимально простой. Я могу либо изменить его, чтобы разрешить несколько подключений, сокетов и т. д. в одном контексте, либо оставить его как есть, и клиенты оболочки будут создавать его несколько раз.

Два недостатка, на мой взгляд.

  1. Бесполезное связывание ресурсов (дополнительный объем памяти, другой поток ввода/вывода и т. д.)
  2. Сокеты, созданные в разных контекстах, не могутвзаимодействовать друг с другом с помощью транспорта 'inproc'. Название «inproc» немного неправильное; на самом деле это означает «внутриконтекст».

cr

Оглядываясь назад на свой и другой исходный код, я в конце концов понял, что код настройки контекста:

void *context = zmq_init (1); //creates the context 

void *responder = zmq_socket (context, ZMQ_REP); //creates the socket

zmq_bind (responder, "tcp://*:5555"); //and binds it

... //Do whatever you want with the socket ...

zmq_close (responder); //destructors
zmq_term (context);

Можно эффективно заменить на:

void *context = zmq_init(1); //saving the context is optional

responder = zmq_socket(type); //creates the socket
//additional [context] can be provided if desired (multi-context?)

zmq_bind (responder, "tcp://*:5555"); //and binds it

... //Do whatever you want with the socket ...

zmqx_dest(); //destroys the global context, else provide alternative [context]

Вот что я сделал с макросами. Легче иметь на 1 переменную меньше для отслеживания (среди 100 других). Хотя это далеко не «идеально», поскольку требует, чтобы макросы находились в одной и той же «области действия», хотя это можно легко решить.

Хотя мой пример — C, он несколько независим от языка.


Отсюда вопрос, в чем смысл/выгода создания таких контекстов?

Когда наличие такой функции на самом деле является недостатком? Потому что я могу легко предвидеть многих (которые просто копируют/вставляют/редактируют код), не принимают во внимание дополнительные накладные расходы и создают «множество контекстов», когда это не нужно [видел это много раз для других подобных структур, хотя их существование его собственное оправдание]

Одной из причин, по которой я это говорю, является тот факт, что я рассматриваю возможность использования zeroMQ в модуле программирования игр для начинающих. В значительной степени отчасти из-за своей простоты и того факта, что сокеты, как правило, поджаривают мозг новичкам.


Random, на самом деле я обосновал смысл контекстной системы Google V8 (похожий вопрос, другая система): В чем конструктивное обоснование HandleScope?

17
задан Community 23 May 2017 в 12:34
поделиться