সমান্তরাল.ফোরআচ () বনাম ফোরাচ (আইওনামারেবল <টি> .এএসপ্যারালাল ())


143

এর্গ, আমি বিসিএলে এই দুটি পদ্ধতি রিফ্লেক্টর ব্যবহার করে সন্ধান করার চেষ্টা করছি, তবে সেগুলি সনাক্ত করতে পারি না। এই দুটি স্নিপেটের মধ্যে পার্থক্য কী?

উত্তর:

IEnumerable<string> items = ...

Parallel.ForEach(items, item => {
   ...
});

খ:

IEnumerable<string> items = ...

foreach (var item in items.AsParallel())
{
   ...
}

একে অপরকে ব্যবহার করার বিভিন্ন পরিণতি রয়েছে কি? (ধরে নিন যে আমি উভয় উদাহরণের বন্ধনীযুক্ত দেহে যা করছি তা থ্রেড নিরাপদ))

উত্তর:


148

তারা বেশ আলাদা কিছু করে।

প্রথমটি বেনামে প্রতিনিধি গ্রহণ করে এবং বিভিন্ন কোডের সমান্তরালে এই কোডটিতে একাধিক থ্রেড চালায়।

দ্বিতীয়টি এই দৃশ্যে খুব কার্যকর নয়। সংক্ষেপে এটি একাধিক থ্রেডে কোয়েরি করা এবং ফলাফলটি একত্রিত করার এবং এটি আবার কলিং থ্রেডে দেওয়ার উদ্দেশ্য। সুতরাং ভবিষ্যত বিবৃতিতে কোডটি সর্বদা ইউআই থ্রেডে থাকে।

যদি আপনি কলটির ডানদিকে লিনক ক্যোয়ারিতে ব্যয়বহুল কিছু করেন তবে এটি কেবল তখনই বোধগম্য হবে AsParallel():

 var fibonacciNumbers = numbers.AsParallel().Select(n => ComputeFibonacci(n));

কেবল কম্পিউটারে ফাইবোনাচি সমান্তরাল পূর্বাভাস করার ফলে কী লাভ?
l -'''''--------- '' '' '' '' '' ''

51

পার্থক্যটি হল, বি সমান্তরাল নয়। কেবলমাত্র AsParallel()এটি একটিটিকে ঘিরে রাখে IEnumerable, যাতে আপনি যখন লিনকিউ পদ্ধতি ব্যবহার করেন, তখন তাদের সমান্তরাল রূপগুলি ব্যবহার করা হয়। মোড়কের GetEnumerator()(যা পর্দার আড়ালে ব্যবহৃত হয় foreach) এমনকি মূল সংগ্রহের ফলাফলও দেয় GetEnumerator()

বিটিডাব্লু, আপনি যদি রিফ্লেক্টরের পদ্ধতিগুলি দেখতে চান তবে সমাবেশে ক্লাসে AsParallel()রয়েছেন । হয় সমাবেশ (নামস্থান )।System.Linq.ParallelEnumerableSystem.CoreParallel.ForEach()mscorlibSystem.Threading.Tasks


আপনি কী বলতে চাইছেন ... তাদের সমান্তরাল রূপগুলি ব্যবহৃত হয় ...?
l -'''''--------- '' '' '' '' '' ''

2
@ সারণি এটি, উদাহরণস্বরূপ, আপনি যখন লিখবেন .Select(), এটি কল করে ParallelEnumerable.Select()এবং সাধারণটি নয় Enumerable.Select()
সুইভ

50

দ্বিতীয় পদ্ধতিটি আপনার উদাহরণে AsParallel () ব্যবহারের সঠিক উপায়ের সাথে সমান্তরাল হবে না

IEnumerable<string> items = ...

items.AsParallel().ForAll(item =>
{
    //Do parallel stuff here
});

3
কেন সহজভাবে পূর্বাভাসের পরিবর্তে ফোরালের সাথে অসামঞ্জস্যের সংমিশ্রণটি ব্যবহার করবেন?
l -'''''--------- '' '' '' '' '' ''
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.