এই প্রশ্নটি আরও ভাল উত্তর প্রাপ্য।
জাভা ম্যাগেড এম এম মাইকেল এবং মাইকেল এল স্কট- র অ-ব্লকিং লক-মুক্ত সারির জন্য ConcurrentLinkedQueue
বিখ্যাত অ্যালগরিদমের উপর ভিত্তি করে তৈরি ।
একটি বিতর্কিত সংস্থান (আমাদের সারি) জন্য এখানে একটি শব্দ হিসাবে "অ-ব্লকিং" এর অর্থ প্ল্যাটফর্মের সময়সূচী যা করে তা বিবেচনা না করেই, কোনও থ্রেড বাধা দেওয়ার মতো, বা যদি প্রশ্নটির থ্রেড খুব ধীর গতির হয়, তবে অন্য থ্রেড একই উত্সটির পক্ষে লড়াই করছে এখনও অগ্রগতি করতে সক্ষম হবে। উদাহরণস্বরূপ যদি কোনও লক জড়িত থাকে তবে লকযুক্ত থ্রেডটি বাধাগ্রস্থ হতে পারে এবং সেই লকের জন্য অপেক্ষা করা সমস্ত থ্রেড অবরুদ্ধ করা হবে। synchronized
জাভাতে অন্তর্নিহিত লকগুলি ( কীওয়ার্ড) এছাড়াও পারফরম্যান্সের জন্য কঠোর শাস্তির সাথে আসতে পারে - যেমন পক্ষপাতদুষ্ট লক করার সময়জড়িত রয়েছে এবং আপনার বিতর্ক রয়েছে, বা কোনও ভিএম স্পিনের অনুগ্রহকালীন সময় পরে লকটিকে "স্ফীত" করার পরে এবং বিতর্কিত থ্রেডগুলি ব্লক করার পরে ... এই কারণেই অনেকগুলি প্রসঙ্গে (কম / মধ্যম বিতর্কিত পরিস্থিতি) তুলনা করা এবং - পারমাণবিক রেফারেন্সে সেটগুলি আরও কার্যকর হতে পারে এবং অনেকগুলি অ-ব্লক করা ডেটা-স্ট্রাকচারগুলি ঠিক এটিই করে।
জাভা ConcurrentLinkedQueue
কেবল অ-ব্লকিং নয়, তবে এর দুর্দান্ত পণ্য রয়েছে যা নির্মাতা গ্রাহকের সাথে লড়াই করে না। একটি একক প্রযোজক / একক গ্রাহক দৃশ্যে (এসপিএসসি), এর সত্যিকার অর্থেই এর মানে হল যে কোনও মতবিরোধ থাকবে না। একাধিক প্রযোজক / একক গ্রাহক দৃশ্যে, গ্রাহক প্রযোজকদের সাথে বিতর্ক করবেন না। একাধিক প্রযোজক চেষ্টা করার সময় এই কাতারে বিতর্ক রয়েছে offer()
তবে সংজ্ঞা অনুসারে এটি সম্মতিযুক্ত। এটি মূলত একটি সাধারণ উদ্দেশ্য এবং দক্ষ নন-ব্লকিং সারি।
এটি একটি হিসাবে BlockingQueue
ভাল না, একটি সারিতে অপেক্ষা করার জন্য একটি থ্রেড ব্লক করা সমকালীন সিস্টেমগুলি ডিজাইনের একটি অদ্ভুত ভয়ঙ্কর উপায়। না। আপনি যদি ConcurrentLinkedQueue
কোনও ভোক্তা / প্রযোজক দৃশ্যে কীভাবে ব্যবহার করবেন তা অনুভব করতে না পারেন , তবে কেবল ভাল অভিনেতার কাঠামোর মতো উচ্চ স্তরের বিমূর্তিগুলিতে স্যুইচ করুন।