2013-01-01 21 views
10

का प्रदर्शन मुझे एक उपभोक्ता एक-निर्माता मानक एल्गोरिदम लागू करना है। मैं इसे Queue और lock कथनों का आसानी से उपयोग कर कार्यान्वित कर सकता हूं। या मैं सिर्फ ConcurrentQueue का उपयोग कर सकता हूं। क्या बेहतर है?ConcurrentQueue बनाम कतार + लॉक

यदि Queue + lock का उपयोग किया जाता है तो मैं "एकाधिक जोड़/पुन: प्रयास" अनुकूलित कर सकता हूं, क्योंकि मैं कई बार lock कर सकता हूं और फिर Add कई बार।

सामान्य मामले में तेज़ी से क्या है - ConcurrentQueue या Queue + lock और अंतर कितना है? बेशक ConcurrentQueue सबसे कठिन आगे है लेकिन मैं बहुत सारे प्रदर्शन को खोना नहीं चाहता क्योंकि मैं इसका उपयोग एचएफटी ट्रेडिंग एप्लिकेशन में कर रहा हूं।

+0

पहला, प्रदर्शन सीपीयू संख्या से संबंधित है। कुछ अमूर्त मोड में मल्टीथ्रेडिंग अनुप्रयोग के प्रदर्शन का मूल्यांकन करना मुश्किल है। – user1929959

+7

आपके पर्यावरण में मापने के बारे में क्या? मैं आपको नंबर दे सकता हूं जो मेरी मशीन पर जो भी चाहें साबित करते हैं। –

उत्तर

19

C# in a Nutshell से:

समवर्ती ढेर, कतार, और बैग कक्षाएं आंतरिक रूप से जुड़ा हुआ सूचियों के साथ लागू किया जाता है। इससे उन्हें nonconcurrent Stack और Queue कक्षाओं की तुलना में कम स्मृति कुशल बनाता है, लेकिन समवर्ती पहुंच के लिए बेहतर है क्योंकि लिंक्ड सूचियां लॉक-फ्री या लो-लॉक कार्यान्वयन के लिए प्रवाहकीय हैं।

दूसरे शब्दों में, सामान्य मामले को परिभाषित करना मुश्किल है, यह अनुमान लगाने के लिए कि प्रदर्शन में अंतर क्या होगा।

यह संग्रह और उपयोग के आकार पर निर्भर करता है। पर्याप्त समवर्ती पहुंच के साथ प्रदर्शन बेहतर होने की उम्मीद की जा सकती है, स्मृति खपत और भी बदतर हो जाएगी।

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