DelayQueue এর আসল বিশ্বের ব্যবহার কী হবে , এটি সমাধান করার জন্য কোন সাধারণ সমস্যাটি তৈরি করা হয়েছিল?
DelayQueue এর আসল বিশ্বের ব্যবহার কী হবে , এটি সমাধান করার জন্য কোন সাধারণ সমস্যাটি তৈরি করা হয়েছিল?
উত্তর:
আমি সম্প্রতি হার সীমাবদ্ধ করার জন্য একটি বিলম্ব সারি ব্যবহার করেছি।
প্রতি সেকেন্ডে এক্স ইভেন্টের সীমাবদ্ধতার জন্য, প্রতিটি ইভেন্টকে 1 সেকেন্ড বিলম্বের সাথে বিলম্বের কাতারে রাখুন।
যদি দেরি কুইয়ে X ইভেন্ট থাকে তবে কুই থেকে () অন্তত 1 টি মেয়াদ শেষ না হওয়া অবধি ব্লক করুন) take কোনও দীর্ঘমেয়াদী সীমা ছাড়িয়ে আপনি এইভাবে একটি স্বল্প মেয়াদে ফেটে যাওয়ার অনুমতি দিন।
এই শ্রেণিটি এমন থ্রেডের জন্য উপযুক্ত যা একাধিক বিলম্বিত ইভেন্টগুলি তাদের যথাযথ ক্রমটিতে প্রসেস করতে চায়।
ধরুন, উদাহরণস্বরূপ, আপনার কাছে 100 ফ্ল্যাশিং লাইট সহ একটি ডিসপ্লে রয়েছে এবং সমস্ত লাইট বিভিন্ন সম্পর্কিত নয় এমন হারে ফ্ল্যাশ করে। প্রতিটি আলোর জন্য আপনার কাছে একটি থ্রেড থাকতে পারে বা এই ক্লাসটি ব্যবহার করে আপনার কাছে একটি থ্রেড সমন্বিত থাকতে পারে। এটি এমন কিছু কাজ করবে:
Lightফ্ল্যাশ রেট সহ একটি ক্লাস করুনDelayedআলোর দিকে ইঙ্গিত করে এমন ইন্টারফেসের একটি বাস্তবায়ন তৈরি করুন sayLightFlashDelayQueueএবং LightFlashআলোর ফ্ল্যাশ হারের জন্য উপযুক্ত বিলম্বের সাথে প্রতিটি আলোর জন্য একটি নতুন যুক্ত করুনDelayQueue পরবর্তী ইভেন্টটি প্রক্রিয়া করার জন্য যত্ন নেয়।
দুটি বাস্তব-বাস্তব উদাহরণ যা আমি ভাবতে পারি:
DelayQueueসম্ভবত অগ্রাধিকারের সারি হিসাবে প্রয়োগ করা হয়েছে , যা সাধারণত গাদা হিসাবে কার্যকর হয় ।
প্রধান ব্যবহার টাইমার ক্লাসগুলির মতো টাস্ক টাইমার হবে
সিস্টেম ঘড়ি থেকে যদি কেউ বিলম্বকে স্বতন্ত্র করে তুলতে পারে (যা আমি জানাতে পারি তবে আপনি নিশ্চিত নন) আপনি এটি "ইভেন্টের জন্য 5 টিক্স এক্সে চলে যান" এর মতো গেম ইভেন্টগুলির জন্য ব্যবহার করতে পারেন (অন্যথায় ক্লক জিটারটি এটি অবিশ্বাস্য করে তোলে)
দ্রষ্টব্য যে বিলম্বগুলি সেই উপাদানগুলির সাথে যুক্ত রয়েছে যা কাতারে সারি করার চেয়ে কাতারে যায়। কিছু বস্তু যা কাতারে প্রবেশ করে শূন্যের বিলম্ব হতে পারে, যদিও কারও কারও কাছে আরও দীর্ঘতর বিলম্ব হতে পারে:
http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/Delayed.html
এটি মাথায় রেখে, আমি কয়েকটি ব্যবহারের ক্ষেত্রে ভাবতে পারি - যদিও এটি সম্ভবত আপনার ভঙ্গুর হতে পারে এবং আপনার বার্তা প্রবাহের ক্ষেত্রে একটি কোডের গন্ধযুক্ত হতে পারে। আমি নির্দিষ্ট পরিস্থিতিতে বাদে তাদের সবার বিকল্প ব্যবহার করতাম:
1) নিয়ন্ত্রণ প্রবাহ - আমরা জানি যে কোনও অর্ডার প্রক্রিয়া করতে 60 সেকেন্ড সময় নেয়, সুতরাং অব্যবহৃত কমপক্ষে 60 সেকেন্ডের অবধি উপস্থিত না হওয়া অবধি কিউয়ের পরবর্তী আদেশটি পড়বেন না।
2) বার্তা প্রবাহ - একটি অত্যন্ত অ্যাসিনক্রোনাস সিস্টেম যেখানে আমরা 2 বা 3 বাহ্যিক পরিষেবাগুলিতে অনুরোধগুলি প্রেরণ করি এবং তারপরে অর্ডারটি প্রক্রিয়াকরণের জন্য পরবর্তী টাস্কটি প্রকাশ করি N সেকেন্ড পরে যখন জানব যে প্রথম কাজের প্রথম ব্যাচ কমপক্ষে সম্পন্ন করার সুযোগ পেয়েছে ।
3) বার্তা ব্যাচিং - সম্ভবত কোনও নির্দিষ্ট ধরণের অর্ডারগুলি ফেটে গেছে, সুতরাং শেষ এন সেকেন্ডে প্রাপ্ত অর্ডারগুলি প্রক্রিয়া করতে দেয় না যাতে এরপরের আদেশটি শীঘ্রই আসে কিনা তা পরের রানে ব্যাচ হিসাবে প্রক্রিয়া করা যায় কিনা তা আমরা দেখতে পারি।
৪) বার্তার অগ্রাধিকার - বিভিন্ন বার্তা বা বিভিন্ন গ্রাহক নিম্ন বা শূন্য বিলম্বের সাথে পরিষেবার কিছুটা উচ্চ মানের পরিষেবা পেতে পারে।
কিছু ক্ষেত্রে, আপনি যে সারণীতে একটি সারিতে রেখেছেন সেগুলি নির্দিষ্ট করার জন্য নির্দিষ্ট সময়ের জন্য সেই সারিটিতে থাকা উচিত। আপনি এখানে java.util.concurrent.DelayQueue ক্লাস ব্যবহার করেন যা ব্লকিংকিউ ইন্টারফেস প্রয়োগ করে। DelayQueue আবশ্যক যে নির্দিষ্ট সময়ের জন্য সারি বস্তুগুলি কাতারে বাসিন্দা।
বাস্তব জগতে ব্যবহার উদাহরণস্বরূপ দ্রষ্টব্য দেখাশোনা করতেন সারি devx সাইট এ নিবন্ধটি
... আসল বিশ্বের উদাহরণ যা আমি এটি উদাহরণস্বরূপ করার জন্য ভেবেছিলাম (যা আপনাকে ক্ষুধার্ত করে তুলতে পারে) তাতে মাফিনগুলি জড়িত। ঠিক আছে, মাফিন অবজেক্টস (যেমন আমরা জাভা কথা বলছি coffee কোনও কফি পাং উদ্দেশ্য নয়)। মনে করুন আপনার একটি বিলম্বের কিউ রয়েছে যার উপরে আপনি মাফিন অবজেক্টস রেখেছেন ... গেটডেলি পদ্ধতিতে সংক্ষেপে বলা হয় যে, ডিলেকুইয়ে অবজেক্টটি রাখার জন্য কত সময় বাকি রয়েছে। যখন এই পদ্ধতিতে ফিরে আসা সংখ্যা শূন্য বা শূন্যের চেয়ে কম হয়ে যায়, বস্তু প্রস্তুত হয় (বা এই উদাহরণে বেকড) এবং উপযুক্ত হওয়ার অনুমতি দেওয়া হয় ...
যেহেতু আপনি সত্যিই এমন কোনও মাফিন খেতে চান না যা পুরোপুরি রান্না হয় না, তাই মফিনটিকে প্রস্তাবিত রান্নার সময়কে ডিলেকিউয়ে রাখুন ...