নির্দিষ্ট কিছু প্রক্রিয়াতে অনুরোধ কেন্দ্রীভূত

ঘটনা

কখনও কখনও আমরা কমান্ড php start.php status এর মাধ্যমে লক্ষ্য করি যে, অনুরোধগুলি কিছু নির্দিষ্ট প্রক্রিয়াতে হাতিয়ে নেওয়া হচ্ছে, অন্য প্রক্রিয়াগুলি সম্পূর্ণ খালি।

দখলকারী ব্যবস্থা

workerman এর বহু প্রক্রিয়ার জন্য সংযোগ পাওয়ার পদ্ধতি ডিফল্টভাবে দখলকারী। অর্থাৎ ক্লায়েন্টের একটি সংযোগ শুরু হলে, সমস্ত খালি প্রক্রিয়ার একটি সুযোগ থাকে সেই সংযোগটি দখল করার, দ্রুততর প্রক্রিয়া আগে পায়। কে দ্রুত সেই সিদ্ধান্ত অপারেটিং সিস্টেমের কোর দখল দ্বারা নির্ধারিত হয়। অপারেটিং সিস্টেম সম্ভবত সবচেয়ে সাম্প্রতিক ব্যবহৃত প্রক্রিয়াটিকে CPU ব্যবহারের অধিকার লাভ করার জন্য অগ্রাধিকার দেয়, কারণ CPU রেজিস্টারগুলিতে আগের প্রক্রিয়ার প্রসঙ্গ তথ্য থাকতে পারে, যা প্রসঙ্গ পরিবর্তনের খরচ হ্রাস করতে সহায়তা করে। তাই যখন ব্যবসা যথেষ্ট দ্রুত হয় অথবা চাপ পরিমাপের সময়, তখন অনেক বেশি দেখা যায় যে সংযোগগুলি কিছু প্রক্রিয়াতে কেন্দ্রীভূতভাবে পরিচালিত হচ্ছে, কারণ এই কৌশলটি ঘন ঘন প্রক্রিয়া পরিবর্তনের মাধ্যমে উন্নত পারফরম্যান্স প্রদান করে এবং এটি কোন সমস্যা নয়।

রাউন্ড রবিন ব্যবস্থা

workerman $worker->reusePort = true; সেট করার মাধ্যমে সংযোগ পাওয়ার পদ্ধতিটি রাউন্ড রাব্বিন পদ্ধতিতে পরিবর্তন করতে পারে, রাউন্ড রাব্বিন পদ্ধতিতে কোর সংযোগগুলি সমস্ত প্রক্রিয়াতে প্রায় সমানভাবে বরাদ্দ করা হয়, ফলে সমস্ত প্রক্রিয়া একসাথে অনুরোধগুলি পরিচালনা করবে।

বিভ্রান্তি

অনেক ডেভেলপার মনে করেন যে সমস্ত প্রক্রিয়া অনুরোধের প্রক্রিয়ায় অংশগ্রহণ করলে পারফরম্যান্স বেশি হবে, তবে এটি সর্বদা সঠিক নয়। যখন ব্যবসা যথেষ্ট সহজ হয়, তখন অনুরোধের প্রক্রিয়ায় অংশগ্রহণকারী প্রক্রিয়ার সংখ্যা CPU কোরের সংখ্যা যতটা কাছে থাকে, সার্ভারটির থ্রুপুট ততটাই বেশি হয়। উদাহরণস্বরূপ, 4-কোরের সার্ভারের জন্য, প্রক্রিয়ার সংখ্যা 4 হিসাবে সেট করলে, হেলোওয়ার্ল্ড চাপ পরিমাপে QPS সাধারণত সর্বাধিক হয়। যদি ব্যবস্থাপনা প্রক্রিয়ার সংখ্যা CPU কোরের সংখ্যা অনেক বেশি হয়, তাহলে প্রক্রিয়া প্রসঙ্গের খরচ বেশি হয়ে যায়, পারফরম্যান্স বরং খারাপ হয়। এবং সাধারণত তথ্যভান্ডার ব্যবসা নিয়ে কাজ করার সময়, প্রক্রিয়ার সংখ্যা CPU কোরের সংখ্যা 3 গুণ থেকে 6 গুণ সেট করলে পারফরম্যান্স আরও ভালো হতে পারে।