প্রক্রিয়া প্রতি 10,000 থ্রেড পরিচালনা করতে আমার লিনাক্স সার্ভারকে অনুকূলিত করুন
অন্যরা যেমন ব্যাখ্যা করেছে, এটি সাধারণত ভুল। একটি থ্রেড একটি ব্যয়বহুল সংস্থান , বিশেষত এটির নিজস্ব কল স্ট্যাক রয়েছে (সাধারণত, একটি মেগাবাইট) এবং কারণ এটি কার্নেলের দ্বারা নির্ধারিত টাস্ক। খোলা ফাইল বর্ণনাকারীর চেয়ে থ্রেডগুলি আরও বেশি ব্যয়বহুল ।
অপারেটিং সিস্টেমগুলি পড়ুন : তিনটি সহজ টুকরো (নিখরচায় ডাউনলোডযোগ্য পাঠ্যপুস্তক)।
থাম্বের নিয়ম হিসাবে, আপনি অনেকগুলি থ্রেড রাখতে চান না এবং অবশ্যই অনেকগুলি চলমান থ্রেড নেই। চলমান থ্রেডগুলির সংখ্যা সাধারণত সর্বাধিক সংখ্যক কোর (বা এর একটি ছোট একাধিক) হওয়া উচিত, সুতরাং প্রায় এক ডজন প্রায় at কোনও প্রক্রিয়াতে থ্রেডের সংখ্যা কিছুটা বড় হতে পারে। সুতরাং আপনার যদি খুব বিস্তৃত সার্ভার না থাকে (অনেকগুলি প্রসেসরের সকেট এবং কোর সহ) আপনার প্রসেসে (আপনার ডেস্কটপে) এক ডজনেরও বেশি চলমান থ্রেড এবং একশত থ্রেড (তাদের বেশিরভাগ নিষ্ক্রিয় থাকে) রাখতে চান না) ।
লিনাক্সে, থ্রেড এবং প্রসেসগুলি একইরকম হয় (যেহেতু উভয়ই ক্লোন (2) দ্বারা তৈরি করা যায় ) এবং উভয়ই কার্নেলের দ্বারা নির্ধারিত কাজ। প্রকৃতপক্ষে কার্নেল শিডিয়ুলারটি শিডিউলিংয়ের কাজগুলি যা কিছু মাল্টি-থ্রেড প্রক্রিয়াটির মধ্যে থ্রেড বা একক থ্রেডেড প্রক্রিয়াটির একক মূল থ্রেড হতে পারে (সেই ক্ষেত্রে আপনি সেই একক থ্রেডটির নাম "প্রক্রিয়া" রাখবেন) বা কার্নেল থ্রেড। আপনি সম্ভবত আপনার ডেস্কটপ সিস্টেমে মোট এক হাজারের বেশি সময়সূচীযোগ্য কাজ করতে চান না।
লিনাক্সে, একটি প্রক্রিয়া হ'ল থ্রেডগুলির একটি গ্রুপ যা একই ভার্চুয়াল ঠিকানার স্থান ভাগ করে (এবং কিছু অন্যান্য জিনিস যেমন ফাইল বিবরণকারী টেবিল ইত্যাদি ভাগ করে ...)। কিছু প্রক্রিয়াতে কেবল একটি থ্রেড থাকে।
একটি ভার্চুয়াল অ্যাড্রেস স্পেস হয় সংজ্ঞায়িত হিসাবে উইকিপিডিয়া
"ভার্চুয়াল ঠিকানাগুলির ব্যাপ্তিগুলির সেট যা একটি অপারেটিং সিস্টেম একটি প্রক্রিয়াতে উপলব্ধ করে"
(তবে এই উত্তরটিও ব্যাখ্যা করে দেখুন যে পরিভাষাটি সর্বজনীন নয় এবং কিছু মাইক্রোসফ্ট ডকুমেন্টেশন পৃথক এবং বেমানান সংজ্ঞা ব্যবহার করে)।
লিনাক্সে, প্রোস (5) কিছু প্রক্রিয়ার ভার্চুয়াল অ্যাড্রেস স্পেস বোঝার জন্য দরকারী। উভয়
cat /proc/self/maps
এবং cat /proc/$$/maps
একটি টার্মিনাল চেষ্টা করুন । আরও দেখুন এই , এবং pmap (1) ও PS (1) ও শীর্ষ (1) ।
সমস্ত ব্যবহারকারীর স্থান প্রোগ্রাম কোনও প্রক্রিয়াতে চলছে এবং ভার্চুয়াল মেমরি ব্যবহার করছে যাতে প্রতিটি প্রক্রিয়াটির নিজস্ব ভার্চুয়াল ঠিকানার স্থান থাকে। ফিজিকাল র্যাম লিনাক্স কার্নেল দ্বারা পরিচালিত একটি সংস্থান এবং অ্যাপ্লিকেশনগুলিতে র্যামের সরাসরি অ্যাক্সেস নেই (এমএমএপি (2) -ইং ছাড়া /dev/mem
, মেম (4) দেখুন )।
সুতরাং কোনও প্রক্রিয়া সরাসরি র্যাম ব্যবহার করে না । এটি ভার্চুয়াল মেমরি ব্যবহার করে এবং এর নিজস্ব ভার্চুয়াল ঠিকানার স্থান রয়েছে। কার্নেল ব্যবহার পৃষ্ঠা সংখ্যা লাগিয়ে প্রকৃত RAM পরিচালনা করতে পৃষ্ঠাগুলি এবং ভার্চুয়াল অ্যাড্রেস স্পেস এবং প্রক্রিয়া প্রদান বিমূর্ত । যে কোনও সময় (এমনকি যখন আপনার প্রক্রিয়াটি অলস থাকে, বা এটি চলমান থাকে তখনও) কার্নেল কিছু পৃষ্ঠা বের করতে পারে (উদাহরণস্বরূপ এগুলি ডিস্কে অদলবদল করে)। কার্নেলটি এমএমইউ কনফিগার করছে (এবং কিছু বিঘ্নিত হ্যান্ডলারের পৃষ্ঠা মিস করা হার্ডওয়্যার ব্যতিক্রমগুলি হ্যান্ডলিং করছে , পৃষ্ঠাটি ডিস্ক থেকে আনার মাধ্যমে বা প্রক্রিয়াতে বিভাগের ত্রুটি প্রচার করে, সংকেত দেখুন () ))
সিস্টেম থ্রেডের উপরে আপনার সবুজ থ্রেড থাকতে পারে (তবে সবুজ থ্রেড লাইব্রেরিগুলি প্রয়োগ করা এবং ডিবাগ করা কঠিন)। দেখব goroutines ব্যবহৃত যান একটি অভিনব উদাহরণস্বরূপ। আরও দেখুন setcontext (3) ।
কখনও কখনও, আপনার সিস্টেমটি ছোটাছুটি পরীক্ষা করতে পারে । এটি তখন ঘটে যখন মোট ভার্চুয়াল মেমরি (সমস্ত প্রক্রিয়া দ্বারা প্রয়োজনীয়) একটি বৃহত ফ্যাক্টর - উপলব্ধ শারীরিক র্যামকে ছাড়িয়ে যায়। তারপরে আপনার কম্পিউটারটি প্রতিক্রিয়াবিহীন হয়ে ওঠে। সম্পর্কে পড়ুন বাসিন্দা সেট আকার , চাহিদা পেজিং , কাজ সেট , মেমোরি overcommitmment , ASLR ।
Linux- -for আরও দেখুন কাঁটাচামচ (2) , ক্লোন (2) , mmap (2) , madvise (2) , posix_fadvise (2) , mlock (2) , execve (2) , পরিচয়পত্র (7) , pthreads (7) , futex (7) , ক্ষমতা (7) ।