আমি টাস্ক ম্যানেজারটি খুললাম এবং "সিস্টেম" এরিয়াতে দেখলাম এবং দেখেছি:
থ্রেডস: 1337
যেহেতু হাইপার থ্রেডিং সহ আমার দ্বৈত-কোর প্রসেসর রয়েছে (যার অর্থ চারটি থ্রেড), তাই যখন আমার প্রসেসরের কেবল চারটি থাকার কথা হয় তখন 1000+ থ্রেড থাকা কীভাবে সম্ভব?
আমি টাস্ক ম্যানেজারটি খুললাম এবং "সিস্টেম" এরিয়াতে দেখলাম এবং দেখেছি:
থ্রেডস: 1337
যেহেতু হাইপার থ্রেডিং সহ আমার দ্বৈত-কোর প্রসেসর রয়েছে (যার অর্থ চারটি থ্রেড), তাই যখন আমার প্রসেসরের কেবল চারটি থাকার কথা হয় তখন 1000+ থ্রেড থাকা কীভাবে সম্ভব?
উত্তর:
সহজ উত্তরটি হ'ল সমস্ত থ্রেড একই সাথে কার্যকর করা হয় না। পুরো ব্যাখ্যা জন্য, পড়ুন।
অপারেটিং সিস্টেমের টাস্ক শিডিয়ুলারটি সাধারণত অ্যাপ্লিকেশনগুলির সময়সূচী তৈরি করার কথা ভাবা হয় এবং কম্পিউটার অন্যটিতে কাজ করার সময় আপনাকে একটি কাজ সম্পাদন করতে দেয়। পুরানো দিনগুলিতে, মাল্টিটাস্কিংয়ের লিটমাস পরীক্ষা অন্য কিছু করার সময় একটি ফ্লপি ডিস্ক ফর্ম্যাট করে। আপনি যদি ওএসকে সত্যই পরীক্ষায় ফেলতে চেয়েছিলেন, সিরিয়াল পোর্টের সাথে সংযুক্ত কোনও মডেমের মাধ্যমে কোনও ফাইল ডাউনলোড করার সময় আপনি একটি ফ্লপি ডিস্ক ফর্ম্যাট করবেন। হার্ডওয়্যারটি আসলে অর্থবহ উপায়ে এটি করার জন্য যথেষ্ট শক্তিশালী হয়ে উঠার সাথে সাথে ভিডিও প্লেব্যাক কখনও কখনও এই জাতীয় পরীক্ষায়ও প্রদর্শিত হয়। যদি ওএসের টাস্ক শিডিয়ুলার সেই কাজগুলিকে সুষ্ঠুভাবে পরিচালনা করতে পারে তবে তা যে কোনও কিছুই হ্যান্ডেল করতে পারে।
যাইহোক, টাস্ক শিডিয়ুলারটি আসলে অ্যাপ্লিকেশনগুলি (প্রক্রিয়াগুলি) নির্ধারণ করে না, এটি থ্রেডগুলি নির্ধারণ করে । প্রতিটি অ্যাপ্লিকেশনটিতে কমপক্ষে একটি থ্রেড থাকে তবে এটি সম্পর্কিত বা স্বতন্ত্র অংশগুলিতে কাজটি ভাগ করতে সম্ভাব্যত বৃহত সংখ্যক থ্রেড ব্যবহার করতে পারে। উদাহরণস্বরূপ, ব্যবহারকারীর ইন্টারফেসটি পরিচালনা করে এমন একটি থ্রেড থাকা এবং ব্যবহারকারীর সম্ভাব্য দীর্ঘ-চলমান ক্রিয়াকলাপটি শুরু করার সময় অন্য থ্রেড তৈরি করা সাধারণ (যা মুদ্রণ, স্প্রেডশিটকে পুনরায় গণনা করার মতো বিষয় হতে পারে, একটি উন্নয়ন পরিবেশ করছে) প্রতীক অনুসন্ধান ইত্যাদি।) কিছু প্রোগ্রামিং এনভায়রনমেন্টালগুলি প্রোগ্রামার থেকে অদৃশ্যভাবে কিছু পরিমাণ থ্রেড প্রবর্তন করে; উদাহরণস্বরূপ, জাভা এবং .NET আবর্জনা সংগ্রহ করতে পারেএকটি পৃথক থ্রেডে, যা প্রোগ্রামারের তাত্ক্ষণিক নিয়ন্ত্রণের বাইরে। কিছু প্রোগ্রাম প্রথম দিকে প্রচুর থ্রেড তৈরি করে এবং সেগুলি পুল করে, কারণ নতুন থ্রেড তৈরি করা তুলনামূলকভাবে ব্যয়বহুল ক্রিয়াকলাপ (যাতে আপনি প্রতিবার যখন প্রয়োজন তখন একটি থ্রেড তৈরি করতে চান না)। পূর্বরূপ যা কিছু করে তা সাধারণত একটি পৃথক থ্রেডে করা হয়, সুতরাং পূর্বরূপ উত্পন্ন হওয়ার সময় UI এর অবশিষ্টাংশ প্রতিক্রিয়াশীল থাকে। ইত্যাদি। একসাথে নেওয়া, এর অর্থ হ'ল যে কোনও সময়ে সিস্টেমে থ্রেডের সংখ্যা সহজেই প্রক্রিয়াগুলির সংখ্যার থেকে বহুগুণ বেশি হতে পারে।
প্রতিটি থ্রেড কয়েক সম্ভব রাজ্যের এক হতে পারে, কিন্তু সবচেয়ে গুরুত্বপূর্ণ পার্থক্য মধ্যে চলমান , runnable এবং অপেক্ষা রাজ্যের; পরিভাষাটি কিছুটা আলাদা হতে পারে তবে এটি সাধারণ ধারণা। যে কোনও এক সময়ে, ভার্চুয়াল প্রতি শুধুমাত্র একটি থ্রেড (হাইপারথ্রেডিং এবং অনুরূপ প্রযুক্তির কারণে) সিপিইউ কোর চলতে পারে (এটি মেশিন কোডের নির্দেশাবলী কার্যকর করে) তবে যে কোনও সংখ্যক থ্রেড চালানো যায় (যার অর্থ এটি প্রাপ্ত প্রার্থী) সিপিইউ পরের বার সিডিয়ুলের সিদ্ধান্ত নিতে হবে যে কোন থ্রেডটি চালানোর অনুমতি দেওয়া উচিত)। অপেক্ষা (অবরুদ্ধ হিসাবেও পরিচিত) থ্রেডগুলি কেবল এটিই, কোনও কিছুর জন্য অপেক্ষা করা - সর্বাধিক সাধারণ ক্ষেত্রে সম্ভবত এটি ব্যবহারকারী, ডিস্ক বা নেটওয়ার্ক আই / ও (বিশেষত ব্যবহারকারীর ইনপুট ব্যতিক্রমীভাবে ধীর) জন্য অপেক্ষা করে।
টাস্ক ম্যানেজারে আপনি যে থ্রেড গণনাটি দেখছেন তা হ'ল এই যে কোনও রাজ্যের মোট থ্রেডের সংখ্যা । উদাহরণস্বরূপ, আমি উইন্ডোজ 7 সিস্টেমে এটি টাইপ করছি বর্তমানে প্রায় 70 টি প্রক্রিয়া শুরু হয়েছে তবে প্রায় 900 থ্রেড রয়েছে। সমস্ত ব্যাকগ্রাউন্ড প্রক্রিয়া বিভিন্ন কার্য পরিচালনা করতে এবং কীভাবে তারা সম্ভবত প্রতিটি থ্রেডের এক বিশাল সংখ্যায় বিভক্ত হয়, এটি কোনও আপত্তিজনক সংখ্যা নয়।
প্রাক-কার্যকরভাবে মাল্টিটাস্কিং অপারেটিং সিস্টেমের টাস্ক শিডিয়ুলারের একেবারে মূল অংশে প্রযুক্তিগত বাস্তবায়নের গভীরতায় আরও কিছুটা যাওয়া সাধারণত এক ধরণের হার্ডওয়্যার বিঘ্নিত হুক। এর অর্থ হ'ল কার্নেল সিপিইউ থামিয়ে দিতে পারে যখন তার কার্য সম্পাদন করার কোনও কার্যকর কাজ নেই (এটি প্রায় কারণগুলির মধ্যে একটি কারণ, যদি কারণ না হয় তবে লিনাক্স কেন আইএ -32- তে বুট করার HLT
নির্দেশিকাটি পরীক্ষা করেসামঞ্জস্যপূর্ণ সিপিইউগুলি, এবং সম্ভবত অন্যান্য আর্কিটেকচারগুলিতেও একই রকম পরীক্ষা করে থাকে), এই জ্ঞানে নিরাপদ যে ভবিষ্যতের সময়টি যথাযথভাবে নির্ধারণ করে, একটি বাধা দেওয়া হবে এবং টাস্ক শিডিয়ুলারকে ডাকা হবে। যেহেতু সিপিইউ অন্য কোন কাজ করছে তা নির্বিশেষে বাধা ফায়ার (যেটি হ'ল বিঘ্নের পিছনে ধারণা), তফসিলটি নিয়মিত সম্পাদন করা হয় এবং নিম্নলিখিত সময় স্লাইসের সময় কোন থ্রেড কার্যকর করা উচিত তা নির্ধারণ করার সুযোগ পায়। কনটেক্সট স্যুইচগুলি তুলনামূলকভাবে ব্যয়বহুল হওয়ায় এটি সাধারণত (কমপক্ষে উত্স কোডের মাধ্যমে) সূচীকারটি থ্রেডগুলির মধ্যে কতটা আগ্রাসীভাবে সুইচ করে তা টিউন করা সম্ভব; থ্রেডগুলি আরও প্রায়শই স্যুইচ করার ফলে সিস্টেমটি আরও প্রতিক্রিয়াশীল হয়ে ওঠে, তবে ওভারহেড স্যুইচ করার অর্থ একটি নির্দিষ্ট কাজের জন্য সমাপ্তির সামগ্রিক সময় বেশি দীর্ঘ হয়। দ্রুততমসিস্টেমটি এমন এক হবে যা কেবল থ্রেডগুলির মধ্যে স্যুইচ করে যখন চলমান থ্রেডটি চালানো আর সম্ভব হয় না (যার অর্থ এটি কোনও কিছুতে অপেক্ষা করা অবরুদ্ধ হয়ে যায়, বা এটির কাজ শেষ হয়ে যায়) কারণ এটি ওভারহেডকে ছোট করে তোলে, তবে সর্বাধিক প্রতিক্রিয়াশীল সিস্টেম থ্রেডের মধ্যে স্যুইচ করবে প্রতিবার সময়সূচীটি আহ্বান করা হয় কারণ এটি নির্দিষ্ট থ্রেডের সিপিইউ সময় পাওয়ার আগে অপেক্ষা করার গড় সময়কে ন্যূনতম করে দেয়। আদর্শ সেটিংটি সাধারণত এই দুটিয়ের মধ্যে কোথাও থাকে এবং লিনাক্স একাধিক শিডিয়ুলার বেছে নেওয়ার পাশাপাশি কার্নেল কনফিগারেশনের মাধ্যমে কিছু টিউনিং পরামিতি সরবরাহ করার একটি বড় কারণ হতে পারে।
অপরদিকে সমবায়ভাবে মাল্টিটাস্কিং ওএস এবং পরিবেশগুলি ( উইন্ডোজ 3.x এর একটি উদাহরণ হিসাবে) নিয়মিতভাবে শিডিয়ুলারের নিয়ন্ত্রণ নিয়ন্ত্রণের জন্য প্রতিটি প্রয়োগের উপর নির্ভর করে। এটি করার জন্য সাধারণত একটি এপিআই ফাংশন থাকে যা প্রায়শই ব্যবহৃত হয় এবং প্রায়শই অনেকগুলি এপিআই ফাংশন তাদের অভ্যন্তরীণ সম্পাদনের প্রবাহের অংশ হিসাবে এটি সম্পাদন করে কারণ এটি ব্যবহারকারীর অভিজ্ঞতা মসৃণ করতে সহায়তা করে। যে নকশার পদ্ধতির কোনও দীর্ঘস্থায়ী ক্রিয়াকলাপের সময় সংক্ষিপ্ত বিরতিগুলির সাথে সংক্ষিপ্ত ব্যবস্থাগুলি ভালভাবে চালিত হওয়া এবং দীর্ঘায়িত অর্থ একটি সেকেন্ডের একটি ছোট ভগ্নাংশের চেয়ে বেশি সময় ধরে কাজ করা যায় ততক্ষণ সেই নকশাকরণটি কার্যকর হয় তবে সেই অ্যাপ্লিকেশনটি যা আটকে রাখতে পারে না পুরো সিস্টেম। ওএস / ২ থাকাকালীন আমি উল্লিখিত মাল্টিটাস্কিং পরীক্ষায় উইন্ডোজ 3.x এত খারাপভাবে কাজ করার একটি বড় কারণ isএকই হার্ডওয়্যারে একই কাজ সম্পাদন করার সময় আনন্দিতভাবে ঘুরে বেড়ানো: একটি অ্যাপ্লিকেশন ফ্লপি ডিস্ক ড্রাইভকে একটি নির্দিষ্ট সেক্টর লিখতে বলতে পারে, এবং কলটি ফিরে আসার আগে এটি করার সময়টি আসলে পরিমাপযোগ্য হতে পারে (দশকে কয়েক মিলিয়ন সেকেন্ডে বা আরো); একটি পূর্বনির্ধারিত মাল্টিটাস্কিং সিস্টেমে তার পরবর্তী নির্ধারিত অনুরোধের সময়সূচীর বিরতি ঘটবে, লক্ষ্য করুন যে থ্রেড বর্তমানে "চলমান" আসলে রাইটিং কল দ্বারা অবরুদ্ধ এবং কেবল চালিতযোগ্য অন্য থ্রেডে স্যুইচ করুন। (অনুশীলনে এটি আরও কিছুটা জড়িত তবে এটি সাধারণ ধারণা))
উভয় প্রাকৃতিকভাবে মাল্টিটাস্কিং এবং সমবায় পরিবেশেও বিভিন্ন থ্রেডের আলাদা আলাদা অগ্রাধিকার থাকার সম্ভাবনা রয়েছে। উদাহরণস্বরূপ, সিস্টেম সময় প্রদর্শনের আপডেটের চেয়ে কোনও যোগাযোগের লিঙ্কের মাধ্যমে প্রাপ্ত থ্রেডটি সময়োপযোগী কার্যকর করা থ্রেড কার্যকর করা আরও বেশি গুরুত্বপূর্ণ, তাই প্রাপ্ত থ্রেডটির উচ্চ অগ্রাধিকার থাকে এবং সময় প্রদর্শন আপডেটের থ্রেডটি কম অগ্রাধিকার পায় । থ্রেড অগ্রাধিকারগুলি কোন থ্রেড কার্যকর করতে দেয় তার তফসিলীর সিদ্ধান্তে ভূমিকা রাখে (উদাহরণস্বরূপ, খুব সরলীকৃত, উচ্চ অগ্রাধিকারের থ্রেডগুলি সর্বদা নিম্ন অগ্রাধিকারের থ্রেডগুলির আগে কার্যকর করা উচিত, সুতরাং নিম্ন অগ্রাধিকারের থ্রেডে কাজ করা বাকি থাকলেও যদি উচ্চ অগ্রাধিকারের থ্রেডটি রান্নেবল হয়ে যায় তবে এটি অগ্রাধিকার গ্রহণ করে) তবে এই ধরনের নির্দিষ্ট সময়সূচী সিদ্ধান্ত অন্তর্নিহিত প্রক্রিয়া নকশাকে প্রভাবিত করে না।
1037 গাড়ি নিয়ে একটি চার লেনের হাইওয়ে সম্পর্কে চিন্তা করুন।
প্রচুর পরিষেবার জন্য কাজ করতে আপনার ওএসের প্রচুর চলমান প্রক্রিয়া দরকার। এমনকি সবচেয়ে সাধারণ গ্রাফিকাল প্রোগ্রামগুলির জন্য মাল্টিথ্রেডেড প্রোগ্রামিংয়ের প্রয়োজন হবে। যখন আপনি আপনার প্রচুর প্রোগ্রাম খোলার কথা ভাবেন তখন আপনি দেখতে পাবেন যে কম্পিউটিং পাওয়ার সংস্থানগুলি ভাগ করে নেওয়া দরকার।
আপনার টাস্ক ম্যানেজার যা দেখায় তা হ'ল বর্তমান সিস্টেম লোড। আপনার কমপ স্পেক্সগুলি যা দেখায় তা হ'ল সমান্তরাল সম্পাদনের জন্য কতগুলি থ্রেড (সম্মুখভাগে) গৃহীত হচ্ছে। হাইপারথ্রেডিং এবং মাল্টিকোর বৈশিষ্ট্যগুলির মধ্যে পার্থক্যের মধ্যে খুব বেশি প্রবেশ না করে, আরও যৌক্তিক ফ্রন্টএন্ড থ্রেড গ্রহণযোগ্যতা সহ একটি সিস্টেম সাধারণত আরও ভাল সম্পাদন করে।
DoEvents
করতেন যা বার্তাটির সারিটি প্রক্রিয়াকরণ করবে - তবে এটি একই থ্রেডে করা হয়েছিল এবং সমস্ত বার্তা প্রক্রিয়াকরণ না হওয়া অবধি দীর্ঘকালীন চলমান অপারেশনটিকে অবরুদ্ধ করে দেবে until । (অবশ্যই, আপনি উইন 32 এপিআই ফাংশনগুলিকে কল করতে পারেন এবং / অথবা অতিরিক্ত প্রক্রিয়া তৈরি করতে পারেন, তবে সেই সময়ে আপনি নীচের স্তরের ভাষাগুলির মধ্যে একটিও ব্যবহার করতে পারেন))
আমাদের ফিরে যেতে হবে এবং নিজেকে জিজ্ঞাসা করা উচিত: একটি সিপিইউযুক্ত একটি কম্পিউটারে দুটি থ্রেড কীভাবে থাকতে পারে?
থ্রেডগুলি হার্ডওয়্যার নয়, সফ্টওয়্যার সত্তা। অন্য থ্রেড রাখতে, আপনাকে কেবল থ্রেড তৈরি করা অবজেক্টগুলির জন্য মেমরির প্রয়োজন, যেমন একটি বিবরণকারী কাঠামো এবং স্ট্যাক।
অপারেটিং সিস্টেম বিভিন্ন সময়ে থ্রেডগুলির মধ্যে স্যুইচ করে, যেমন নির্দিষ্ট বিঘ্নগুলির মধ্যে (যেমন টাইমার বিঘ্নিত) বা যখন থ্রেডগুলি অপারেটিং সিস্টেমে কল করে।
সিস্টেমে বিদ্যমান সমস্ত থ্রেডগুলির মধ্যে কেবলমাত্র একটি উপসেট সাধারণত এমন একটি রাজ্যে থাকে যা সাধারণত "চলমানযোগ্য" নামে পরিচিত। চলমান থ্রেডগুলি চালনার জন্য আগ্রহী: তারা হয় সম্পাদন করছে, বা "রান কাতারে" বসে আছে, শিডিয়ুলার দ্বারা প্রেরণের জন্য অপেক্ষা করছে। যে থ্রেডগুলি চালানো যায় না সেগুলি "ব্লকড" করা হয়, কিছু সংস্থান অর্জন করতে বা ইনপুট গ্রহণের জন্য অপেক্ষা করা, বা "ঘুমন্ত" যা ইনপুটটিতে অবরুদ্ধ হওয়ার মতো, যেখানে "ইনপুট" সময় পার হয়ে যায়। অপারেটিং সিস্টেমের শিডিয়ুলার ফাংশন প্রসেসরের রান কাতারে একবার নজর রাখলে এবং সম্পাদন করতে একটি আলাদা থ্রেড বেছে নিলে একটি "কনটেক্সট স্যুইচ" হয়।
"হাইপারথ্রেডিং" দ্বারা বিভ্রান্ত হবেন না যা নির্দিষ্ট হার্ডওয়্যার বৈশিষ্ট্যের জন্য ইন্টেলের নাম।