PDA

View Full Version : توضیح دستور موازی



icegirl_f2r
سه شنبه 30 تیر 1394, 17:20 عصر
میشه اینن دستور را توضیح بدین ممنون.
133438

icegirl_f2r
سه شنبه 30 تیر 1394, 17:22 عصر
اگه میشه دقبقا توضیح بدین دستورات و پارامترها را . یکم پیچیده است گیج میشم نمیدونم پارامترهاش چیه و چرا اینطور نوشته میشه.

ژیار رحیمی
سه شنبه 30 تیر 1394, 17:37 عصر
سلام جستجوی فایل هایی که نام آنها با حرف a شروع و با هر پسوندی تو تمام دایرکتوری های موجود در سیستم است.
ابتدا یه Task تعریف شده که آیتمهای لیست باکس رو خالی میکنید و دکمه رو به حالت غیر فعال میبرد. بعد تمام فایل هارو با شاخص موجود در سیستم درون متغییر fileInfo میریزه و با استفاده از حلقه foreach به صورت موازی(اینم یک Task میباشد) تک تک فایل های درون لیست fileInfo به تاخیر 0.3 ثانیه به تابع currentFile ارسال میکند.احتمالا تابع currentFile که در کد شما وجود ندارد کار افزودن آیتم به لیست باکس رو انجام بدهد

ژیار رحیمی
سه شنبه 30 تیر 1394, 18:04 عصر
چرا اینطور نوشته شده؟ این قطعه کد سه کار متفاوت رو انجام میدهد.اگر این کدهارو بدون استفاده از Task و یا Thread نوشته میشد راندمان کار پایین میومد بدین صورت ابتدا listbox ایتم هاش خالی میشد و بعد از اتمام کار اول به سراغ جستجوی فایل و در آخر کار افزودن ایتم ها.تا اتمام این سه کار UI در حالت قفل در میاد و راندمان کار و سرعت اجرا پایین میامد.با تقسیم کار بین کار و ایجاد Task اجرای هر کدوم از کارها رو به یک cpu داده میشود و الان 3 cpu به طور همزمان هر کدام بخشی از کارو انجام میدهند که سرعت کار به مراتب بالاتر میرود اگه سه کارو با یه cpu انجام بدیم تفاوت و راندمان آن نسبت به حالت استفاده از Task روشن و بدیهی ست.پیشنهاد من اگه آشنایی یا تجربه کار با Task و یا Thread رو نداری تا زمانی که تسلط وتجربه کافی بدست نیاوردی ازش اسفاده نکن.

icegirl_f2r
سه شنبه 30 تیر 1394, 18:47 عصر
چرا اینطور نوشته شده؟ این قطعه کد سه کار متفاوت رو انجام میدهد.اگر این کدهارو بدون استفاده از Task و یا Thread نوشته میشد راندمان کار پایین میومد بدین صورت ابتدا listbox ایتم هاش خالی میشد و بعد از اتمام کار اول به سراغ جستجوی فایل و در آخر کار افزودن ایتم ها.تا اتمام این سه کار UI در حالت قفل در میاد و راندمان کار و سرعت اجرا پایین میامد.با تقسیم کار بین کار و ایجاد Task اجرای هر کدوم از کارها رو به یک cpu داده میشود و الان 3 cpu به طور همزمان هر کدام بخشی از کارو انجام میدهند که سرعت کار به مراتب بالاتر میرود اگه سه کارو با یه cpu انجام بدیم تفاوت و راندمان آن نسبت به حالت استفاده از Task روشن و بدیهی ست.پیشنهاد من اگه آشنایی یا تجربه کار با Task و یا Thread رو نداری تا زمانی که تسلط وتجربه کافی بدست نیاوردی ازش اسفاده نکن.

ممنون.
میشه دستورات task . foreach را با پارامترهایش واسم توضیح بدین.
آخه این فقط یه پروژه دانشجویی هست.
و اینکه اگه بخوام وسط کار از ادامه عملیات صرف نظر کنم چکار باید بکنم؟
ممنون میشم جواب بدین.

ژیار رحیمی
سه شنبه 30 تیر 1394, 19:15 عصر
try
{
listBox.Items.Clear();
button.Enabled = false;
var fileInfo = info.EnumerateFiles("a*.*", SearchOption.AllDirectories);
foreach (var item in fileInfo)
{
currentFile(item.FullName, listBox, button);
}
}
catch { };



کد بالا رو جایگزین کن.زیاد مهم نیست حالا همزمانی نداشته باشه چون یه پروژه دانشجویی هست ایتمهای درون لیست از 200 ، 300 تا بیستر نمیشه بهتره حذف شه چون ممکنه سوال پرسیده شود و آشنایی باهاش نداری تو دردسر میفتی.کد رو تو ایتور فروم نوشتم تست نکردم رو سیستم اگر خطای داد بگین

icegirl_f2r
چهارشنبه 31 تیر 1394, 16:22 عصر
کد بالا رو جایگزین کن.زیاد مهم نیست حالا همزمانی نداشته باشه چون یه پروژه دانشجویی هست ایتمهای درون لیست از 200 ، 300 تا بیستر نمیشه بهتره حذف شه چون ممکنه سوال پرسیده شود و آشنایی باهاش نداری تو دردسر میفتی.کد رو تو ایتور فروم نوشتم تست نکردم رو سیستم اگر خطای داد بگین

ممنونم. اما من دقیقا دستورات را به همین صورت یعنی موازی میخوام چون درسمون موازی سازی هست!
اگه لطف کنید دستورات موازی را برام توضیح بدین ممنون میشم.

icegirl_f2r
چهارشنبه 31 تیر 1394, 21:14 عصر
کسی دستورات موازی را بلد نیست عایا؟:گریه::ناراحت:

ژیار رحیمی
پنج شنبه 01 مرداد 1394, 20:28 عصر
Task اوصلا به چند شیوه ییاده سازی میشود. خط اول یه نمونه استفاده از Task با استفاده از Factory هست داخل تابع StartNew() پارامتر اول آن دستوراتی که قرار Task انجام بده به صورت inline و به شیوه عبارت لامدا ()=> اشاره به بدنه دستورات میکنه که با { شورع و با } پایان دستوراتی که Task باید انجام بدهد رو مشخص کرده.و بعد از آن پارامتر دوم StartNew مشخص کرده که آیا امکان لغو یا کنسل سازی Task هست ک مقدارآن CancelationToken.none که امکان کنسل کردن غیر فعال و پارامتر بعدی تابع StartNew() یه متغییری هست به نام uiSchedulerاز نوع TaskScheduler هست که در ابتدای برنامه بصورت public تعریف کرده .میزسیم به خط Parallel.Foreach.قبل از اجرای این دستور ما تمام فایل های با الگوی مورد جستجو را در متغییر fileInfo ریختیم.تعداد فایل ها میتونه از 0 تا هر چندتا باشه حالا ما فرض میکنینم تعداد فایل های یافت شده 5000تا باشه Parallel.Foreach بصورت موازی دو یا چند Task رو بطور موازی که هر Task روی یک cpu در حال اجرا میباشد تولید و لیست را بستگی به تعداد به چند بخش تقسیم گرده ممکن است 4 تا Task بصورت موازی و به هر Task تعداد 1250 آیتم از بدهد و پردازش هر قسمت رو یکی از Task های تولید شده توسط Paralle.Foreach انجام میدهد.

icegirl_f2r
یک شنبه 04 مرداد 1394, 19:30 عصر
Task اوصلا به چند شیوه ییاده سازی میشود. خط اول یه نمونه استفاده از Task با استفاده از Factory هست داخل تابع StartNew() پارامتر اول آن دستوراتی که قرار Task انجام بده به صورت inline و به شیوه عبارت لامدا ()=> اشاره به بدنه دستورات میکنه که با { شورع و با } پایان دستوراتی که Task باید انجام بدهد رو مشخص کرده.و بعد از آن پارامتر دوم StartNew مشخص کرده که آیا امکان لغو یا کنسل سازی Task هست ک مقدارآن CancelationToken.none که امکان کنسل کردن غیر فعال و پارامتر بعدی تابع StartNew() یه متغییری هست به نام uiSchedulerاز نوع TaskScheduler هست که در ابتدای برنامه بصورت public تعریف کرده .میزسیم به خط Parallel.Foreach.قبل از اجرای این دستور ما تمام فایل های با الگوی مورد جستجو را در متغییر fileInfo ریختیم.تعداد فایل ها میتونه از 0 تا هر چندتا باشه حالا ما فرض میکنینم تعداد فایل های یافت شده 5000تا باشه Parallel.Foreach بصورت موازی دو یا چند Task رو بطور موازی که هر Task روی یک cpu در حال اجرا میباشد تولید و لیست را بستگی به تعداد به چند بخش تقسیم گرده ممکن است 4 تا Task بصورت موازی و به هر Task تعداد 1250 آیتم از بدهد و پردازش هر قسمت رو یکی از Task های تولید شده توسط Paralle.Foreach انجام میدهد.

ممنونم. فقط شما میدونید متغیری که از نوع TaskScheduler تعریف میکنیم برای چی هستش؟یعنی زمانبندی میکنه؟