zeroMQ (A very useful socket replacement for those who don't know) आसपास poking करते समय, मैंने मेलिंग सूची में यह सवाल भर में आया था:शून्य एमक्यू संदर्भ के पीछे तर्क क्या है?
Using multiple contexts : Is there a downside to using multiple contexts?
वहाँ कई संदर्भों का उपयोग कर के लिए एक नकारात्मक पक्ष यह है? मेरे पास एक क्लास रैपर है जो मैं जितना संभव हो उतना सरल रखना चाहता हूं। मैं इसे एक ही संदर्भ में एकाधिक कनेक्ट, सॉकेट इत्यादि को अनुमति देने के लिए संशोधित कर सकता हूं या इसे छोड़ सकता हूं और रैपर के क्लाइंट इसे कई बार तुरंत चालू कर सकते हैं।
दो डाउनसाइड्स जैसा कि मैं इसे देखता हूं।
- कोई अच्छा प्रभाव (अतिरिक्त स्मृति पदचिह्न, एक और मैं/हे धागा, आदि)
- सॉकेट विभिन्न संदर्भों में बनाया करने के लिए संसाधनों को मिलाकर नहीं कर सकते हैं एक दूसरे को 'inproc' परिवहन का उपयोग कर के साथ संवाद। 'इनप्रोक' नाम एक गलत नामक है; यह वास्तव में "intracontext" का मतलब है।
करोड़
मेरा और विभिन्न अन्य स्रोत कोड को वापस देख रहे हैं, मैं अंत में एहसास हुआ कि संदर्भ सेट अप कोड:
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 अन्य लोगों के बीच)। हालांकि यह "आदर्श" से बहुत दूर है क्योंकि मैक्रोज़ को "फ़ंक्शन स्कोप" के भीतर होने की आवश्यकता होती है, हालांकि इसे आसानी से हल किया जा सकता है।
जबकि मेरा उदाहरण सी है, यह कुछ हद तक भाषा-अज्ञेयवादी है।
इसलिए सवाल, ऐसे संदर्भों बनाने की बात/लाभ क्या है?
जब यह वास्तव में ऐसी सुविधा की अनुमति देने के लिए नकारात्मक है? क्योंकि मैं आसानी से कई लोगों को देख सकता हूं (जो सिर्फ कॉपी/पेस्ट/कोड संपादित करते हैं), अतिरिक्त ओवरहेड को ध्यान में रखते हुए, और इसकी आवश्यकता होने पर "कई संदर्भ" बनाते हैं [अन्य समान संरचना के लिए यह कई बार देखा गया है, हालांकि उनके अस्तित्व में इसका अपना औचित्य]
मैं यह कह रहा हूं कि एक कारण यह है कि मैं शुरुआती गेम प्रोग्रामिंग मॉड्यूल में शून्य एमक्यू का उपयोग करने पर विचार कर रहा हूं। इसकी सादगी के कारण काफी हद तक काफी हद तक, और तथ्य यह है कि सॉकेट नए लोगों के लिए मस्तिष्क कोशिकाओं को फ्राइंग करते हैं। What is the design rationale behind HandleScope?
तो जब आवश्यक हो तो निपटने के लिए यह एक सुविधाजनक कंटेनर को उबालता है = डी – PicoCreator