2010-08-05 17 views
6

मैं एक छोटे से उत्पाद पर पृष्ठभूमि में चलाने के इरादे से एक कंसोल प्रोग्राम के निर्माण से जुड़ी एक छोटी परियोजना पर काम कर रहा हूं।तेजी से विफल या सुरक्षित विफल?

कार्यक्रम एक तरफ मुख्य उत्पाद (आईपी 21) के साथ बात करना और एक सर्वर के रूप में कार्य करना है, दूसरे ग्राहकों को संभालना है।

मैंने आर्किटेक्चर पर काम करना शुरू कर दिया है और reactor पर आधारित कुछ घटनाओं जैसे कि मुख्य उत्पाद द्वारा उत्पन्न कनेक्शन या घटनाओं के आधार पर कुछ आया है। क्लाइंट हैंडलिंग भाग को प्रति क्लाइंट में अलग थ्रेड में ख्याल रखा जाता है।

लेकिन मैं इस वास्तुकला पर मेरा एक सहयोगी से असहमत हूं। वह कहता है कि मुझे रिएक्टर और कुछ अन्य घटकों को एक अलग धागे में मुख्य धागे में चलाना चाहिए। मुख्य धागा जितना संभव हो उतना आसान होना चाहिए। मैं ऐसा करूँगा ताकि अगर यह हिस्सा करता है तो प्रोग्राम क्रैश नहीं होता है। उनका कहना है कि एक हिंसक दुर्घटना की तुलना में एक पूरी तरह से गैर-कार्यात्मक कार्यक्रम होना बेहतर है।

मुझे लगता है कि तेजी से विफल होना बेहतर है। यदि प्रोग्राम का यह (महत्वपूर्ण) हिस्सा दुर्घटनाग्रस्त हो जाता है तो उसे जीवित रखने का प्रयास करने का कोई कारण नहीं है। इसके अलावा मुझे विश्वास है कि यह उपयोगकर्ता को परेशानी का कारण बन सकता है; वह देखेंगे कि कुछ गलत है लेकिन यदि वह कार्य सूची को देखता है (हमारा उत्पाद किसी प्रकार का टास्क मैनेजर होता है जो कि चलने वाले कार्यों को सूचीबद्ध करता है और आसानी से क्रैश किए जाने वाले ट्रैक को ट्रैक करने की अनुमति देता है) तो वह इस कार्यक्रम को क्रैश नहीं करेगा!

मुझे आशा है कि आप हमें एक तरफ या अन्य करने के लिए कुछ तर्क देकर मदद कर सकते;)

संपादित: अपने जवाब लेकिन क्या हम इस बात पर असहमत रिएक्टर और कुछ डालने की उपयोगिता के बारे में है के लिए धन्यवाद गंभीर प्रोग्रामिंग से संबंधित समस्या के मामले में एक अलग धागे में अन्य घटक (एक segfault/deadlock/< यहां गंभीर समस्या डालें >)। मुझे लगता है कि यह धागा बिना प्रोग्राम के चलने के लिए खतरनाक और व्यर्थ दोनों होगा।

+0

प्रोक्टर पैटर्न का उपयोग करें :) http://en.wikipedia.org/wiki/Proactor_pattern – garik

उत्तर

1

प्रश्न संपादित करते समय मुझे एसओ पर this answer मिला, जो मुझे लगता है, इस प्रश्न का उत्तर भी देते हैं।

0

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

3

उपयोग Proactor पैटर्न :)

सुरक्षित असमर्थ रहे हैं। लेकिन यह कार्यों (महत्वपूर्ण या नहीं) और उपयोगकर्ता की वफादारी पर निर्भर करता है। स्थिरता। आपने एक उपयोगकर्ता या सभी खो दिया है।

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