রাপার ক্লাস ব্যবহার মধ্যে পার্থক্য কি SynchronizedMap
একটি উপর, HashMap
এবং ConcurrentHashMap
?
এটি HashMap
পুনরুক্তি করার সময় কী কেবল সংশোধন করতে সক্ষম হচ্ছে ( ConcurrentHashMap
)?
রাপার ক্লাস ব্যবহার মধ্যে পার্থক্য কি SynchronizedMap
একটি উপর, HashMap
এবং ConcurrentHashMap
?
এটি HashMap
পুনরুক্তি করার সময় কী কেবল সংশোধন করতে সক্ষম হচ্ছে ( ConcurrentHashMap
)?
উত্তর:
সিঙ্ক্রোনাইজড HashMap
:
প্রতিটি পদ্ধতি একটি অবজেক্ট স্তর লক ব্যবহার করে সিঙ্ক্রোনাইজ করা হয়। সুতরাং সিঙ্কম্যাপে গেট অ্যান্ড পুট পদ্ধতিগুলি একটি লক অর্জন করে।
পুরো সংগ্রহটি লক করা একটি কার্যকারিতা ওভারহেড। যখন একটি থ্রেড লক ধরে আছে, অন্য কোনও থ্রেড সংগ্রহটি ব্যবহার করতে পারে না।
ConcurrentHashMap
জেডিকে 5 এ চালু হয়েছিল।
অবজেক্ট পর্যায়ে কোনও লকিং নেই, লকিংটি আরও সূক্ষ্ম গ্রানুলারিটিতে। ConcurrentHashMap
একটির জন্য , লকগুলি হ্যাশম্যাপ বালতি স্তরে থাকতে পারে।
নিম্ন স্তরের লকিংয়ের প্রভাবটি হ'ল আপনার সহবর্তী পাঠক এবং লেখক থাকতে পারেন যা সংক্রামিত সংগ্রহের পক্ষে সম্ভব নয়। এটি আরও অনেক মাপদণ্ডের দিকে নিয়ে যায়।
ConcurrentHashMap
অন্য ConcurrentModificationException
থ্রেড এটির পুনরাবৃত্তি করার সময় একটি থ্রেড এটি সংশোধন করার চেষ্টা করলে একটি নিক্ষেপ করে না ।
এই নিবন্ধটি জাভা 7: হ্যাশম্যাপ বনাম কনকন্টারহ্যাশম্যাপটি খুব ভাল পঠিত। অত্যন্ত বাঞ্ছনীয়.
ConcurrentHashMap
এর size()
ফলাফল তারিখের বাইরে হতে পারে। size()
"অনুশীলনে জাভা কনকুরেন্সি" বই অনুসারে নির্ভুল গণনার পরিবর্তে একটি প্রত্যাবর্তন অনুমোদিত। সুতরাং এই পদ্ধতিটি সাবধানতার সাথে ব্যবহার করা উচিত।
সংক্ষিপ্ত উত্তর:
উভয় মানচিত্রই Map
ইন্টারফেসের থ্রেড-নিরাপদ বাস্তবায়ন । ConcurrentHashMap
উচ্চতর সমঝোতা প্রত্যাশিত ক্ষেত্রে উচ্চতর থ্রুপুটটির জন্য প্রয়োগ করা হয়।
পেছনের ধারণা নিয়ে ব্রায়ান গয়েটসের নিবন্ধটিConcurrentHashMap
খুব ভাল পঠিত। অত্যন্ত বাঞ্ছনীয়.
Map m = Collections.synchronizedMap(new HashMap(...));
ডকস.অরাকল.com
ConcurrentHashMap
পুরো মানচিত্র সিঙ্ক্রোনাইজ না করে থ্রেডটি নিরাপদ। লক দিয়ে লেখার সময় পাঠগুলি খুব দ্রুত ঘটতে পারে।
আমরা কনকন্টারহ্যাশম্যাপ এবং সিঙ্ক্রোনাইজড হ্যাশম্যাপ উভয় ব্যবহার করে থ্রেড সুরক্ষা অর্জন করতে পারি। তবে তাদের আর্কিটেকচারের দিকে নজর দিলে অনেক পার্থক্য রয়েছে।
এটি অবজেক্ট পর্যায়ে লকটি বজায় রাখবে। সুতরাং আপনি যদি পট / গেটের মতো কোনও অপারেশন করতে চান তবে আপনাকে প্রথমে লকটি অর্জন করতে হবে। একই সময়ে, অন্যান্য থ্রেডগুলিকে কোনও ক্রিয়াকলাপ করার অনুমতি নেই। সুতরাং এক সময়ে, কেবলমাত্র একটি থ্রেড এটি পরিচালনা করতে পারে। সুতরাং অপেক্ষার সময়টি এখানে বাড়বে। আমরা বলতে পারি যে আপনি যখন কনকেনারহ্যাশম্যাপের সাথে তুলনা করছেন তখন পারফরম্যান্স তুলনামূলকভাবে কম।
এটি বিভাগের স্তরে লকটি বজায় রাখবে। এটির 16 টি বিভাগ রয়েছে এবং ডিফল্টরূপে 16 হিসাবে সমাবর্তন স্তর বজায় রাখে। সুতরাং একসাথে, 16 টি থ্রেড কনকন্টারহ্যাশম্যাপে পরিচালনা করতে সক্ষম হতে পারে। তদতিরিক্ত, পঠন অপারেশন একটি লক প্রয়োজন হয় না। সুতরাং যে কোনও সংখ্যক থ্রেড এটিতে গেট অপারেশন করতে পারে।
থ্রেড 1 যদি বিভাগ 2 এ পুট ক্রিয়াকলাপ সম্পাদন করতে চায় এবং থ্রেড 2 বিভাগ 4 এ পুট ক্রিয়াকলাপ সম্পাদন করতে চায় তবে এটি এখানে অনুমোদিত allowed মানে, 16 থ্রেড একসাথে কনকন্টেনশ্যাশম্যাপে আপডেট (পুট / ডিলিট) অপারেশন করতে পারে।
যাতে অপেক্ষার সময়টি এখানে কম হয়। সুতরাং সিঙ্ক্রোনাইজড হ্যাশম্যাপের তুলনায় পারফরম্যান্স তুলনামূলকভাবে ভাল।
দুটিই হ্যাশম্যাপের সিঙ্ক্রোনাইজড সংস্করণ, তাদের মূল কার্যকারিতা এবং তাদের অভ্যন্তরীণ কাঠামোর পার্থক্য সহ।
ConcurrentHashMap অভ্যন্তরীণ অংশ যা স্বাধীন হ্যাশ-ম্যাপের বিকল্প ধারণার দিক থেকে যেমন দেখা যাবে গঠিত। এই জাতীয় সমস্ত বিভাগ উচ্চতর যুগ্ম মৃত্যুদন্ডে পৃথক থ্রেড দ্বারা লক করা যেতে পারে। সুতরাং, একাধিক থ্রেড একে অপরের জন্য বাধা / অপেক্ষার ছাড়াই কনক্রেন্ট হ্যাশম্যাপ থেকে কী-মানযুক্ত জোড়া পেতে / রাখতে পারে। এটি উচ্চতর আউটপুট জন্য প্রয়োগ করা হয়।
যেহেতু
কালেকশনস.সিঙ্ক্রোনাইজড ম্যাপ () , আমরা হাশম্যাপের একটি সিঙ্ক্রোনাইজড সংস্করণ পাই এবং এটি ব্লকিং পদ্ধতিতে অ্যাক্সেস করা হয়। এর অর্থ যদি একসাথে একাধিক থ্রেডগুলি সিঙ্ক্রোনাইজড ম্যাপে অ্যাক্সেস করার চেষ্টা করে, তারা সিঙ্ক্রোনাইজড পদ্ধতিতে এক সাথে কী-মান জোড়গুলি পেতে / রাখার অনুমতি পাবে।
ConcurrentHashMap
lock stripping
বৃহত্তর ডিগ্রি ভাগ করে নেওয়া অ্যাক্সেসের অনুমতি হিসাবে পরিচিত সূক্ষ্ম-দানাদার লকিং প্রক্রিয়া ব্যবহার করে। এ কারণে এটি আরও ভাল সম্মতি এবং স্কেলিবিলিটি সরবরাহ করে ।
এছাড়াও ফিরে iterators ConcurrentHashMap
হয় স্বাস্থ্যহীন সামঞ্জস্যপূর্ণ পরিবর্তে দ্রুত কৌশল ব্যর্থ সিঙ্ক্রোনাইজ করা HashMap দ্বারা ব্যবহৃত।
SynchronizedMap
অবজেক্টটিতে লকটি ধরে রাখার পদ্ধতিগুলি রয়েছে ConcurrentHashMap
যেখানে "লক স্ট্রাইপিং" এর ধারণা রয়েছে যেখানে পরিবর্তে সামগ্রীর বালতিতে তালা রাখা হয়। সুতরাং স্কেলাবিলিটি এবং কর্মক্ষমতা উন্নত।
সমকালীন হ্যাশম্যাপ:
1) উভয় মানচিত্র মানচিত্র ইন্টারফেসের থ্রেড-নিরাপদ বাস্তবায়ন।
2) উচ্চতর সমাবর্তন প্রত্যাশিত ক্ষেত্রে উচ্চতর মাধ্যমে আউটপুট ব্যবহারের জন্য সমবর্তী হ্যাশম্যাপ প্রয়োগ করা হয়।
3) অবজেক্ট স্তরে কোনও লকিং নেই।
সিঙ্ক্রোনাইজ হ্যাশ মানচিত্র:
1) প্রতিটি পদ্ধতি একটি অবজেক্ট স্তরের লক ব্যবহার করে সিঙ্ক্রোনাইজ করা হয়।
একত্রে হ্যাশম্যাপ ডেটাতে একযোগে অ্যাক্সেসের অনুমতি দেয়। পুরো মানচিত্রটি বিভাগগুলিতে বিভক্ত।
অপারেশন পড়া। get(Object key)
এমনকি বিভাগের স্তরেও সিঙ্ক্রোনাইজ করা হয় না।
তবে অপারেশন লিখুন। remove(Object key), get(Object key)
বিভাগ বিভাগে লক অর্জন। পুরো মানচিত্রের কেবলমাত্র অংশটি লক করা আছে, অন্যান্য থ্রেডগুলি এখনও লক করা ব্যতীত বিভিন্ন বিভাগের মান পড়তে পারে।
অন্যদিকে সিঙ্ক্রোনাইজড ম্যাপ , অবজেক্ট পর্যায়ে লক অর্জন করুন। সমস্ত থ্রেড অপারেশন (পড়ুন / লিখুন) নির্বিশেষে বর্তমান থ্রেডের জন্য অপেক্ষা করা উচিত।
সাম্প্রতিক হ্যাশম্যাপ বনাম সিঙ্ক্রোনাইজড হ্যাশম্যাপের জন্য একটি সহজ পারফরম্যান্স পরীক্ষা
। পরীক্ষার প্রবাহটি put
এক থ্রেডে কল করছে get
এবং Map
একই সাথে তিনটি থ্রেডে কল করছে । @ ত্রিশিব যেমন বলেছিলেন, সমকালীন হ্যাশম্যাপে লক ছাড়াই যার পাঠ্য পরিচালনার জন্য উচ্চতর থ্রুপুট এবং গতি রয়েছে। ফলাফল যখন অপারেশন সময় শেষ হয় 10^7
, সমকালীন 2x
হ্যাশম্যাপ সিঙ্ক্রোনাইজড হ্যাশম্যাপের চেয়ে দ্রুত is
SynchronizedMap
এবং ConcurrentHashMap
উভয় থ্রেড নিরাপদ শ্রেণি এবং বহুবিধ অ্যাপ্লিকেশন ব্যবহার করা যেতে পারে, তাদের মধ্যে প্রধান পার্থক্য তারা থ্রেড সুরক্ষা কীভাবে অর্জন করবে সে সম্পর্কে।
SynchronizedMap
পুরো মানচিত্রের লকটি লকটি অর্জন করে, যখন ConcurrentHashMap
মানচিত্রের উদাহরণটি একাধিক বিভাগে বিভক্ত করে এবং লক করা হয়।
জাভা ডক এর হিসাবে
হ্যাশটেবল এবং সংগ্রহসমূহ ynসিনক্রোনাইজড ম্যাপ (নতুন হ্যাশম্যাপ ()) সিঙ্ক্রোনাইজ করা হয়েছে। তবে কনক্র্যান্টহ্যাশম্যাপটি "সমবর্তী"।
একসাথে সংগ্রহটি থ্রেড-সেফ, তবে একক বর্ধিত লক দ্বারা পরিচালিত হয় না।
সাম্প্রতিক হ্যাশম্যাপের বিশেষ ক্ষেত্রে, এটি নিরাপদে যে কোনও সংখ্যক সমান্তরাল পাঠের পাশাপাশি একটি সুসংগত সংখ্যার সমকালীন লেখার অনুমতি দেয়। "সিঙ্ক্রোনাইজড" ক্লাসগুলি দরকারী হতে পারে যখন আপনার দরিদ্র স্কেল্যাবিলিটি ব্যয়ে একক লকের মাধ্যমে সমস্ত অ্যাক্সেস আটকাতে হবে।
অন্যান্য ক্ষেত্রে যেখানে একাধিক থ্রেডগুলি একটি সাধারণ সংগ্রহ অ্যাক্সেস করতে পারে বলে মনে করা হয়, "সমবর্তী" সংস্করণগুলি সাধারণত পছন্দনীয়। এবং অলিঙ্ক ক্রোনাইজড সংগ্রহগুলি যখন সংগ্রহগুলি অংশীদারি করা হয় না বা অন্য লকগুলি ধারণ করার সময় কেবল অ্যাক্সেসযোগ্য হয় তখন সেগুলি পছন্দনীয়।
Hashtable
এবং এর মধ্যে আলাদা কিSynchronized HashMap
?