আপনি যখন কোনও মাল্টি কোর প্রসেসরে একাধিক থ্রেড শুরু করেন, তখন কি বিভিন্ন কোর দ্বারা প্রসেস করার গ্যারান্টি দেওয়া হয়?


24

আমার একটি পেন্টিয়াম কোর আই 5 প্রসেসর রয়েছে, এতে 4 টি কোর রয়েছে। আমি যদি এটি সি # কনসোল প্রোগ্রামে করি

var t1 = new Thread(Thread1);
var t2 = new Thread(Thread2);
t1.Start();
t2.Start();

টি 1 এবং টি 2 থ্রেডগুলি পৃথক কোরগুলিতে চলার গ্যারান্টিযুক্ত?


1
ধরে নেওয়া যে সি # রানটাইম সমান নেটিভ সিস্টেম কলগুলি অন্য থ্রেড তৈরি করতে ব্যবহার করে (এবং এটি সত্যই সমান্তরাল; সিপিথনের কুখ্যাত গ্লোবাল ইন্টারপ্রেটার লকের মতো এটিই সমস্ত কিছুর জন্য নয় ) এটি কেবলমাত্র অপারেটিং সিস্টেমের প্রক্রিয়া / টাস্ক শিডিয়ুলারের উপর নির্ভর করবে । যদিও সাধারণভাবে, কোডটি সত্যই থ্রেড নিরাপদ যদি আপনি ধরে নেন যে t1এবং t2বিভিন্ন সময়ে নির্বিচারে অর্ডারে কার্যকর করা হয় (উদাহরণস্বরূপ এটি কিছু মডেলের আগেt2 শুরু হওয়া সম্ভব )। t1
ব্রেকথ্রু

2
আমি জানতাম না যে পেন্টিয়াম আই 5 প্রসেসর রয়েছে। সম্ভবত আপনি কোর আই 5 মানে? Picky। আমি জানি: ডি
জোসেফগেরোন

উত্তর:


18

আপনি গ্যারান্টি দিতে পারবেন না। যে দুটি Threadদুটি পৃথক পৃথক কোর উপর চালানো হয়। আসলে, আপনি গ্যারান্টিও দিতে পারবেন না যে Threadকেবলমাত্র একটি কোর (!) তে চলবে

এটি হ'ল পরিচালিত থ্রেডগুলি ওএস থ্রেডের মতো নয় - একক পরিচালিত থ্রেড এটি সমর্থন করতে একাধিক ওএস থ্রেড ব্যবহার করতে পারে। সি #, আপনি কেবল কি কখনো পরিচালিত সঙ্গে সরাসরি কারবার Threadগুলি (অন্তত, পি / ডাকা অবলম্বন না WinAPI থ্রেডিং ফাংশন, যা আপনি কখনোই উচিত ডাকতে)

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


বাস্তবে, .net Threadগুলি হয় ওএস থ্রেড। তবে সে কারণেই কোনও গ্যারান্টি নেই যে একটি একক থ্রেড সর্বদা একই কোরে কার্যকর হবে।
সোভিক

2
@ এসভিক: অনুশীলনে, x86 এ , এটি সত্য। তবে, মানটি স্পষ্টতই বলেছে যে আপনি এই আচরণের উপর নির্ভর করতে পারবেন না, তাই এটি ভবিষ্যতে পরিবর্তন হতে পারে। বাস্তবে, এটি XBox 360 এর মতো নেট নেট সিএলআর এর অন্যান্য সংস্করণে সত্য নয়
ব্লুরাজা - ড্যানি পিফ্লুঘুফুট

@ ব্লুরাজা - আমরা যে সিএলআর এর সংস্করণ নিয়ে কথা বলছি তা সম্পর্কে প্রশ্নটি নির্দিষ্ট। আপনি দু'টি পৃথক কোরে অ্যাসিঙ্ক থ্রেড ব্যবহার করে কিছু উপস্থিত থাকার গ্যারান্টি দিতে পারেন কারণ এর অর্থ হ'ল তারা একে অপরের কাছ থেকে অ্যাসিঙ্ক ঘটবে। বর্তমান উদাহরণ কোডটি প্রযুক্তিগতভাবে একটি সিঙ্ক কল। অবশ্যই অপারেটিং সিস্টেম সিদ্ধান্ত নেয় কোন কোর ব্যবহার করা হবে।
রামহাউন্ড

@ রামহাউন্ড "আপনি গ্যারান্টি দিতে পারেন যে দু'টি পৃথক কোরে অ্যাসিঙ্ক থ্রেড ব্যবহার করে কিছু উপস্থিত থাকবে" - এটি মিথ্যা। মূল asyncশব্দটি (যা আমি অনুমান করি যে আপনি যার বিষয়ে কথা বলছেন, যেমন "অ্যাসিঙ্ক থ্রেডগুলি" অপ্রয়োজনীয়) কোনও BackgroundWorkerথ্রেড ব্যবহারের জন্য কেবল সিনট্যাকটিকাল চিনির মতো, যা অন্য কোনও মতই N পৃথক কোর না।
ব্লুরাজা - ড্যানি পিফ্লুঘোফিট

@ ব্লুরাজা - যদি দুটি অ্যাসিঙ্ক থ্রেড শুরু করা হয় তবে তারা দু'টি একই সময়ে চালিত হতে পারে যেখানে সেখানে 2 টি সিপিইউ কোর থাকে। যদি কেবল একটিই ছিল তবে অপারেটিং সিস্টেমটি সময় নির্ধারণ করবে যখন প্রতিটি থ্রেড অগ্রাধিকার পাবে এবং চালিত হবে এবং আপনার সাধারণ একক থ্রেডেড থ্র্যাশিং পরিস্থিতি ঘটবে। এটিই আমাকে শিখানো হয়েছিল যে কীভাবে একটি সিপিইউ মাল্টি-থ্রেড পরিচালনা করে।
রামহাউন্ড

15

না, ওএস এবং সিপিইউ সিদ্ধান্ত নেবে কখন কী চলবে। আপনি যে সাধারণ উদাহরণটি দেখিয়েছেন, অন্যান্য কাজগুলি বাদ দেওয়ার জন্য, হ্যাঁ এগুলি সম্ভবত পৃথক কোরগুলির সমান্তরালে চলবে, তবে এর নিশ্চয়তা খুব কমই রয়েছে that

কোনও প্রদত্ত থ্রেডে মূল বরাদ্দকরণের উপরে কিছু নিয়ন্ত্রণ নেওয়ার চেষ্টা করার জন্য আপনি থ্রেড অ্যাফিনিটি ব্যবহার করতে পারেন ।

কোন থ্রেডগুলি সম্পূর্ণ সমান্তরাল হওয়া উচিত এবং কোনটি অপেক্ষা করতে পারে সেই ক্ষেত্রে ডেকে স্ট্যাক করার জন্য নির্ধারিত অগ্রাধিকারগুলি বিবেচনা করুন।


1
আমি আরও যোগ করতে চাই, ভার্চুয়ালাইজেশন প্রযুক্তিগুলির সাথে আপনার প্রোগ্রাম এবং হার্ডওয়্যারের মধ্যে অন্য স্তর রয়েছে। ওএস অ্যাপ্লিকেশনটিতে যা পেশ করে তা শারীরিকভাবে সঠিক নাও হতে পারে।
Keltari

1
ওএস থ্রেডগুলির জন্য এটি উইনাপি ফাংশন, পরিচালিত থ্রেডগুলির জন্য নয়। তাদের কখনই সি # থেকে কল করা উচিত নয়, কারণ তারা নেট থ্রেড শিডিয়ুলারের সাথে মারাত্মকভাবে হস্তক্ষেপ করতে পারে।
ব্লুরাজা - ড্যানি প্লেফুঘুফুট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.