के बीच अंतर सुविधाओं के माध्यम से जा रहा था, here का उल्लेख किया गया। समझ में नहीं आया कि parallelSort()
वास्तव में क्या करता है। क्या कोई बता सकता है कि sort()
और parallelSort()
के बीच वास्तविक अंतर क्या है?Arrays.sort() और Arrays.parallelSort()
उत्तर
समानांतर तरह सूत्रण उपयोग करता है। तत्वों के बहुत होने पर यह तेज़ होता है। समांतरता के लिए ऊपरी भाग बड़े सरणी पर सहनशील रूप से छोटा हो जाता है, लेकिन यह छोटे बच्चों के लिए बड़ा होता है।
इस तालिका पर एक नजर डालें (बेशक, परिणाम, सीपीयू, पृष्ठभूमि प्रक्रियाओं पर निर्भर करते हैं आदि):
इस लिंक से लिया: http://www.javacodegeeks.com/2013/04/arrays-sort-versus-arrays-parallelsort.html
ओवरहेड के बारे में बात करते समय "बहुत छोटा" जैसी कोई चीज़ नहीं है। आदर्श रूप से मुझे 0 पसंद है :) :) – Trejkaz
इस परीक्षण में समय माप पूरी तरह से गलत तरीके से आयोजित किए गए थे। यह भी ध्यान रखें कि यदि इनपुट सरणी 4096 से कम है, तो समानांतर बस अनुक्रमिक क्रम एल्गोरिदम को कॉल करता है। क्या आप वास्तव में विश्वास करते हैं कि अतिरिक्त लंबाई जांच 602 तत्वों के लिए 3 एमएस की आवश्यकता है? –
हे @TagirValeev। मुझे पता है कि यह सवाल पुराना है, लेकिन मैंने सोचा कि मैं यह इंगित करूंगा कि 602 के लिए समय में अंतर लंबाई की जांच के कारण नहीं है; कम से कम यह चेक विशेष रूप से दोष नहीं है। मुझे लगता है कि ये बार कई परीक्षणों का औसत नहीं था, इसलिए शायद यह एक और प्रक्रिया कंप्यूटर पर चल रही थी जिसने 3 एमएमएस अंतर को जन्म दिया। बस विचार करने के लिए कुछ विषय। लेकिन मैं मानता हूं कि माप गलत तरीके से आयोजित किए गए थे, क्योंकि सटीकता केवल परीक्षण मामलों की बड़ी संख्या के माध्यम से प्राप्त की जाती है। ऐसे अन्य लेख हैं जो समान प्रदर्शन लाभ दिखाते हैं। – adpro
Arrays.parallelSort():
विधि एक सीमा मूल्य और आकार सीमा मूल्य Arrays # तरह() API का उपयोग क्रमबद्ध हो जाता है की तुलना में कम से किसी सरणी (अर्थात अनुक्रमिक छंटाई) का उपयोग करता है।
private static final int getSplitThreshold(int n) {
int p = ForkJoinPool.getCommonPoolParallelism();
int t = (p > 1) ? (1 + n/(p << 3)) : n;
return t < MIN_ARRAY_SORT_GRAN ? MIN_ARRAY_SORT_GRAN : t;
}
एक बार अपने निर्णय लिया समानांतर में या सीरियल में सरणी सॉर्ट करने के लिए है कि क्या है, इसकी अब तय करने के लिए: और सीमा मशीन के समानांतरवाद पर विचार गणना की जाती है, सरणी के आकार और रूप में गणना की जाती है सरणी को कई हिस्सों में विभाजित करने के लिए कैसे करें और फिर प्रत्येक भाग को फोर्क/कार्य में शामिल करें जो इसे सॉर्ट करने का ख्याल रखेगा और फिर एक और फोर्क/कार्य में शामिल हों जो क्रमबद्ध सरणी विलय करने का ख्याल रखेगा। जेडीके 8 में कार्यान्वयन इस दृष्टिकोण का उपयोग करता है:
सरणी को 4 भागों में विभाजित करें।
पहले दो हिस्सों को क्रमबद्ध करें और फिर उन्हें मर्ज करें।
अगले दो भागों को सॉर्ट करें और फिर उन्हें मर्ज करें। और ऊपर दिए गए चरणों को प्रत्येक भाग के साथ दोहराया जाता है जब तक कि भाग के आकार का आकार ऊपर की गई थ्रेसहोल्ड मान से कम न हो।
तुम भी Javadoc
छँटाई एल्गोरिथ्म में कार्यान्वयन विवरण पढ़ सकते हैं एक समानांतर तरह-मर्ज है कि उप सरणियों कि खुद हल कर रहे हैं और उसके बाद विलय कर में सरणी टूट जाता है। जब उप-सरणी लंबाई न्यूनतम ग्रैन्युलरिटी तक पहुंच जाती है, तो उप-सरणी उचित Arrays.sort विधि का उपयोग करके क्रमबद्ध की जाती है। यदि निर्दिष्ट सरणी की लंबाई न्यूनतम ग्रैन्युलरिटी से कम है, तो इसे उपयुक्त Arrays.sort विधि का उपयोग करके क्रमबद्ध किया जाता है। एल्गोरिदम को मूल सरणी की निर्दिष्ट सीमा के आकार से अधिक काम करने की जगह की आवश्यकता नहीं होती है। फोर्कजॉइन आम पूल का उपयोग किसी समानांतर कार्यों को निष्पादित करने के लिए किया जाता है।
Array.sort():
यह सामग्री सॉर्ट करने के लिए तरह या टिम विलय के नीचे क्रमबद्ध उपयोग करता है। यह सब अनुक्रमिक रूप से किया जाता है, भले ही मर्ज सॉर्ट का उपयोग विभाजन को विभाजित और जीतने के लिए किया जाता है, यह सब अनुक्रमिक रूप से किया जाता है।
संक्षेप में, parallelSort
एकाधिक धागे का उपयोग करता है। यदि आप वास्तव में जानना चाहते हैं तो यह article अधिक विस्तृत विवरण है।
वर्तमान छंटाई कार्यान्वयन से
। यह वृद्धि Arrays क्लास द्वारा प्रदान की गई सॉर्टिंग परिचालनों का एक ही सेट प्रदान करेगी, लेकिन समानांतर कार्यान्वयन के साथ फोर्क/फ्रेमवर्क में शामिल हों। इन नए एपीआई अभी भी कॉलिंग थ्रेड पर के साथ तुल्यकालिक हैं क्योंकि यह समांतर प्रकार पूर्ण होने तक संचालन को सॉर्ट करने से आगे नहीं बढ़ेगा।
आप जो बताते हैं कि एल्गोरिथ्म कई सूत्र का उपयोग करता है, तो सरणी काफी बड़ी है the javadoc का उल्लेख कर सकते,:
छँटाई एल्गोरिथ्म एक समानांतर तरह-मर्ज है कि उप विन्यास में, सरणी टूट जाता है जो खुद को क्रमबद्ध कर रहे हैं और फिर विलय कर रहे हैं। जब उप-सरणी लंबाई न्यूनतम ग्रैन्युलरिटी तक पहुंच जाती है, तो उप-सरणी उचित
Arrays.sort
विधि का उपयोग करके क्रमबद्ध की जाती है। [...]ForkJoin
सामान्य पूल किसी भी समांतर कार्यों को निष्पादित करने के लिए उपयोग किया जाता है।)1. Arrays.sort (:
दोनों एल्गोरिथ्म के बीच मुख्य अंतर निम्न हैं एक अनुक्रमिक छंटाई है।
- एपीआई ऑपरेशन के लिए एकल धागा का उपयोग करता है।
- एपीआई ऑपरेशन करने के लिए थोड़ा लंबा समय लगता है।
2. Arrays.ParallelSort(): एक समानांतर छंटाई है।
एपीआई एकाधिक धागे का उपयोग करता है।
- एपीआई सॉर्ट() की तुलना में कम समय लेता है।
अधिक परिणामों के लिए, हमें सभी को जवा 8 का इंतजार करना है !! चीयर्स !!
Array.sort(myArray);
अब आप उपयोग कर सकते हैं -
Arrays.parallelSort(myArray);
यह स्वचालित रूप से कई भागों, जो स्वतंत्र रूप से कोर की एक संख्या भर में हल हो जाएगा और फिर वापस एक साथ समूहीकृत में लक्ष्य संग्रह तोड़ देगा । यहां एकमात्र चेतावनी यह है कि जब एक व्यस्त वेब कंटेनर जैसे अत्यधिक बहु-थ्रेडेड वातावरण में बुलाया जाता है, तो इस दृष्टिकोण के लाभ बढ़ने वाले CPU संदर्भ स्विच की लागत के कारण (90% से अधिक) कम हो जाएंगे।
स्रोत link
Arrays.sort() तत्वों सॉर्ट करने के लिए एकल थ्रेड का उपयोग करता है लेकिन Arrays.ParallelSort() इच्छा से अधिक थ्रेड उपयोग करता है।
समानांतर में सामान्य प्रकार की तुलना में कम समय लगेगा।
- 1. जावा: Arrays.sort quicksort और mergesort
- 2. जावा Arrays.sort
- 3. Arrays.sort (वस्तु []) फेंक नहीं है classcastexception
- 4. Arrays.sort() कैसे पारित चर बदलता है?
- 5. Arrays.sort (ऑब्जेक्ट [] ए) - यह कैसे कार्यान्वित किया जाता है?
- 6. Arrays.sort() - प्राचीन और जटिल डेटा प्रकारों के लिए दो अलग-अलग रणनीतियों को क्रमबद्ध करने के लिए
- 7. जावा की Arrays.sort विधि विभिन्न प्रकार के लिए दो अलग सॉर्टिंग एल्गोरिदम का उपयोग क्यों करती है?
- 8. जावा में जेनिक्स और सॉर्टिंग
- 9. libgdx का उपयोग करके, मैं स्क्रॉलपैन में टेक्स्ट और छवियों दोनों को कैसे जोड़ सकता हूं?
- 10. दो स्ट्रिंग की तुलना करना और उन्हें वर्णानुक्रम में क्रमबद्ध करना
- 11. कस्टम आदेश देने
- 12. जावा 8
- 13. एंड्रॉइड: छवि कैश रणनीति और मेमोरी कैश आकार
- 14. "#", "$", "%", "&", और "_" "\ #", "\ $", "\%", "\ &", और "\ _"
- 15. सॉर्ट करें और किसी अन्य सरणी में परिवर्तनों को प्रतिबिंबित करें
- 16. लैम्बडास और जेनेरिक का उपयोग करते समय विधि का संदर्भ संदिग्ध है
- 17. क्यों तरह जावा द्वारा प्रयोग किया जाता मर्ज है एक सरणी तत्वों 7
- 18. विशेष वर्णों जैसे कि
- 19. प्रदर्शन और सॉर्टिंग, और mysql और php
- 20. "और" और "या"
- 21. "बिटवाइस और" और सी ++
- 22. और बनाम * और | बनाम +
- 23. getters और setters और
- 24. सीएसएस "और" और "या"
- 25. जावा तुलनाकारी वर्ग सॉर्ट करने के लिए सरणियों
- 26. क्यों Collections.sort Quicksort के बजाय मर्ज सॉर्ट का उपयोग करता है?
- 27. {} और {}
- 28. और
- 29. $ (...) और `...`
- 30. $ * और $ @
उम, 'समानांतरॉर्ट' एकाधिक धागे का उपयोग करता है, जबकि 'sort' नहीं है ... –