Mientras hurgando zeroMQ (A very useful socket replacement for those who don't know), me encontré con esta pregunta en la lista de correo:¿Cuál es el razonamiento detrás del contexto zeroMQ?
Using multiple contexts : Is there a downside to using multiple contexts?
¿Hay una desventaja de usar múltiples contextos? Tengo un contenedor de clases que me gustaría mantener lo más simple posible. Puedo modificarlo para permitir conexiones múltiples, sockets, etc. en un contexto único o dejarlo como está y hacer que los clientes del contenedor lo instancian varias veces.
Dos desventajas como yo lo veo.
- consumir recursos a ningún buen efecto (huella de memoria adicional, otro hilo de E/S, etc.)
- conectores creados en diferentes contextos no puede se comunican entre sí utilizando el transporte del 'inproc'. El nombre 'inproc' es un poco inapropiado; realmente significa "intracontext".
cr
Mirando hacia atrás en la mina y varios otros código fuente, al final me di cuenta de que el contexto configuración código:
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);
Podría efectivamente se sustituye por:
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]
Y eso es lo que hice con las macros. Hace las cosas más fáciles para tener 1 variable menos para rastrear (entre otros 100). Aunque está lejos de ser "ideal", ya que requiere que las macros estén dentro del mismo "alcance de función", aunque esto podría resolverse fácilmente.
Si bien mi ejemplo es C, esto es un tanto independiente del idioma.
De ahí la pregunta, ¿cuál es el punto/beneficio de la creación de este tipo de contextos?
¿Cuándo es realmente un inconveniente permitir tal característica? Porque puedo prever fácilmente muchos (que solo copiar/pegar/editar código), no tener en cuenta la sobrecarga adicional, y crear "muchos contextos" cuando no es necesario [visto esto muchas veces para otra estructura similar, aunque su existencia tiene su propia justificación]
Una de las razones por las que digo esto, es el hecho de que estoy considerando usar zeroMQ, en un módulo de programación de juegos para principiantes. En gran medida, en parte debido a su simplicidad, y al hecho de que los enchufes tienden a freír las células cerebrales para los nuevos tipos.
aleatoria, en realidad justifica la razón de ser del sistema contexto V8 de Google (pregunta similar; sistema diferente): What is the design rationale behind HandleScope?
Por lo tanto, hierve en un recipiente conveniente para desechar cuando sea necesario = D – PicoCreator