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