2010-11-30 9 views
6

गुड दोपहर,मैपपॉइंट पर बहु-थ्रेडिंग पहुंच?

जैसा कि मैंने पहले एक और पोस्ट में कहा था, मुझे मानचित्र में कुछ बिंदुओं के बीच कुछ 8,000,000 छोटी-छोटी/पथ दूरी की गणना करनी है, जिनके निर्देशांक जानते हैं। समस्या यह है कि, जबकि सीधी रेखा दूरी गणना करने के लिए आसान (और त्वरित) थी, किसी ने मुझे बताया कि एक थ्रेडेड एप्लिकेशन को MapPoint का उपयोग करके इस दूरी की गणना करने में समस्या हो सकती है। सवाल यह है कि मुझे बहु-थ्रेडिंग के बारे में कुछ नहीं पता है ... मैं वर्तमान में i7 - 720QM वातावरण पर काम कर रहा हूं, इसलिए मैं इन गणनाओं को बनाने के लिए सभी 4 कोर का उपयोग करना चाहता हूं ... क्या ऐसा करने का कोई आसान तरीका है सी # या सी ++ में?

बहुत बहुत धन्यवाद।

उत्तर

3

यदि आप मेरी सलाह के मुकाबले मल्टीथ्रेडिंग के लिए पूरी तरह से नए हैं, तो बैकग्राउंडवर्कर घटक के साथ प्रारंभिक बिंदु के रूप में शुरू होता है और धीरे-धीरे अधिक गर्न्युलर थ्रेडिंग अवधारणाओं पर स्विच होता है।

और यदि आप टास्क समांतर लाइब्रेरी की तुलना में ..नेट 4.0 का उपयोग कर रहे हैं तो आपको प्रारंभ करने का आसान तरीका मिल जाता है।

लिंक नीचे

TPL

BackGroundWorker

+0

क्या मैं मैपपॉइंट के साथ टीपीएल का उपयोग कर सकता हूं? क्या मैं लूप के लिए समानांतर कर सकता हूं? – user2381422

1

देखें मुझे गया हो सकता है कि जो ने कहा कि यह एक लंबे समय ले जाएगा। MapPoint का COM API एकल थ्रेडेड है। समांतर में कई मार्गों की गणना करने का तरीका कई मैपपॉइंट्स को शुरू करना है, प्रत्येक अपने स्वयं के धागे पर।

तो अपने क्वाड कोर के लिए, आप 2-3 धागे शुरू करेंगे। प्रत्येक धागा अपना मैपपॉइंट शुरू करता है, और उसके बाद इसे रूटिंग के लिए उपयोग करता है। आपके पास प्रति कोर एक मानचित्रपॉइंट नहीं होगा। साथ ही ओएस ओवरहेड और आपके आई/ओ ओवरहेड, यदि आप एक मैपपॉइंट एक मार्ग की गणना करते हैं, तो आप पाएंगे कि बाद के संस्करण आंशिक रूप से आंतरिक रूप से बहु-थ्रेडेड हैं और यदि वे उपलब्ध हैं तो लगभग 1.5 कोर ले सकते हैं।

यहां देखने के लिए बहुत सारे मिलचास भी हैं। मैपपॉइंट का अपना कचरा संग्रह बैच मार्ग गणना के लिए अनुकूलित नहीं है। इसके लिए सबसे आसान कामकाज आवधिक अंतराल पर प्रत्येक मैपपॉइंट एप्लिकेशन को पुन: प्रारंभ करना है (दिन में कम से कम एक बार लेकिन शायद अधिक बार)।

इसके अलावा, कुछ ऑपरेशन (फ़ाइल ओपन मुख्य रूप में प्रतीत होता है) कई मैपपॉइंट्स द्वारा एक बार में नहीं कहा जा सकता है। शायद क्योंकि वे एक ही फाइल खोलने की कोशिश कर रहे हैं, लेकिन मैंने आगे की जांच नहीं की है। इससे बचने के लिए आपको अपनी लॉकिंग तंत्र को लागू करने की आवश्यकता होगी।

.NET 4 के लिए सौरभ की सलाह अच्छा लगता है: मैं अभी तक गुस्से में नेट 4 की बहु सूत्रण का उपयोग करना - मेरे MapPoint/नेट सूत्रण अनुभव नेट के साथ है 2.

मैं क्या पता नहीं है आपका ऐप है, लेकिन क्या आप जानते थे कि मैं एक उत्पाद बेचता हूं जो बैच रूट दूरी/समय गणना के लिए बहु-प्रोसेसर मैपपॉइंट का उपयोग करता है ... :-)

+0

आपने कहा कि MapPoint एकल थ्रेडेड है। लेकिन सौरभ ने कहा कि मैं टीपीएल का उपयोग कर सकता हूं। तो यहाँ कौन है? – user2381422

+0

इसे आज़माएं: ध्यान दें कि सौरभ स्पष्ट रूप से नहीं कहता कि उन्होंने इसे MapPoint के साथ उपयोग किया है। मैपपॉइंट मल्टी-थ्रेडिंग (सी # और पायथन दोनों) के साथ मेरा अनुभव यह है कि इसे बहुत मोटे (यानी ऐप-लेवल) होना चाहिए, और फिर भी आपको कुछ फ़ंक्शन लॉक करने की आवश्यकता है। – winwaed

संबंधित मुद्दे