PDA

توجه ! این یک نسخه آرشیو شده می باشد و در این حالت شما عکسی را مشاهده نمی کنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : پیاده سازی یک برنامه به صورت پاپ لاین با thread



roya_arshady
Monday 1 February 2010, 10:08 PM
چگونه می توان از thread برای پیاده سازی یک برنامه به صورت پاپ لاین استفاده کرد؟

فرض کنید یک حلقه داریم و در آن چند فانکشن اجرا می شود حال چگونه از thread ها استفاده کنیم تا بتوانیم به صورت پاپ لاین این فانکشن ها اجرا شوند.

SaeedAlg
Tuesday 2 February 2010, 07:34 PM
سلام
اگر درست منظورتون رو فهمیده باشم یک سری تابع دارین که به صورت پایپ لاینی کار میکنن، برای اینکه نخی با اونها کار کنید کافیه جایی که میخواید فراخونی کنید (تابع بعدی رو) تو یه نخ جدید این کار رو انجام بدید و اونو فراخوانی کنید مثل این




Function1()
{
/*
DoSomething();
*/
Thread MyWorkerThread = new Thread(new ThreadStart(Function2));

MyWorkerThread.Start();
}

اگر تو کلاسهای متفاوتند توابعت میتونی از delegate ها استفاده کنی که پارامتری هم فراخونیش کنی:



public delegate void DelegateFunction2;
class Class1
{
public DelegateFunction2 m_DelegateFunction2;

int void Main()
{
m_DelegateFunction2 = new DelegateFunction2(Function2);
/*
DoSomething()
*/
return 0;
}
}

class Class2
{
Class1 x;
Function1()
{
/*
DoSomething();
*/
x.InvokeMethod(x.m_DelegateFunction2 , null);
// second parameter is an object collection which determines m_DelegateFunction2's input values.
}
}

roya_arshady
Wednesday 3 February 2010, 12:42 PM
سلام . راستی من هنوز موفق نشدم توابع را به صورت پاپلاین اجرا کنم لطفاً بهم بگو چه جوری می شه چن تابع را به صورت پاپلاین پشت سرهم اجرا کرد.

SaeedAlg
Wednesday 3 February 2010, 01:11 PM
میشه بگید کاری که میخواید بکنید چیه؟ چون اگه منظورتون اینه که یک سری تابع دارین زنجیره ای فراخونی میشن که همون جور که تو کد اول نوشته بودم میتونید فراخونیشون کنین، اگر کاری که میخواید بکنید رو بگید بهتره (بگید پروژه ای که دارید چیه؟ اگه فقط میخواید تست کنید اول مساله رو درست برای خودتون تعریف کنید بعد مساله تعریف شده رو بگید مثلا میخواید یه اتوماسیون بنویسید و ... )

roya_arshady
Thursday 4 February 2010, 01:12 AM
مسئله تعریف شده است یک الگوریتم رمز نگاری است که برای افزایش سرعت اجرای آن یک راه آن است که این برنامه به صورت پاپلاین اجرا بشه . در این برنامه چند تابع اصلی داریم که روی هر بلاک 64 بیتی باید اجرا شوند این توابع در یک جلقه for قرار دارند. نمی خواهم از حلقه for استفاده کنم یعنی وقتی بلاک 1 وارد تابع 1 شد و اجرا شد و سپس وارد تابع 2 می شود برای اجرا حال بلاک 2 وارد تابع 1 بشود در حالی که بلاک 1 در تابع 2 در حال اجراست.

SaeedAlg
Thursday 4 February 2010, 12:43 PM
این بیشتر به رمزگشایی شبیه تا رمزنگاری، در هر صورت داخل همون حلقه For خودتون ابتدا روی بلاک 1 تابع 1 رو به صورت نخی اجرا میکنین بعد انتهای تابع 1 تابع 2 رو به همون فرمتی که گفتم فراخوانی کنید و ... در این حلقه هر بلاک جداگانه اجرا میشود و بررسی میگردد و اصلا بلاک 2 برای بلاک اول معطل نمی ماند. (معمولا در رمزگشایی ها بلاکها مستقلند) در واقع حلقه شما در کمتر از یک ثانیه کل فایل را پیمایش میکند اما زمانی که به انتهای حلقه رسیدید نخهای زیادی در حال اجرا هستند، از اونجا که کامپیوتر در اختیار شما احتمالا بیشتر از 16 سی پی یو نداره، بهتره حداکثر در هر زمان 64 نخ همروند بیشتر نداشته باشین.
وقتی مینویسید MyThread.Start() (داخل دات نت) نخ جدید شما شروع به کار میکنه و کنترل اون رو به jit و سیستم عامل دادید. و برنامه شما در ادامه شروع به کار میکند.
من فکر میکنم کمی در مورد چند نخیها مطالعه کنید مشکلتون برطرف میشه
برای این کار به این پست (http://www.developercenter.ir/forum/showthread.php?t=22647) مراجعه کنید، کتابی هست به اسم Pro C#2008 and .Net 3.5 که فصلی در مورد چند نخی داره و فوق العاده عالی توضیح داده سی شارپه اما تبدیلش به VB.net کاری نداره. حداکثر 1 روز برای کسی که چند نخی بلد نیست طول بکشه.
(http://resources.ftml.net/ebooks/Pro%20C%23%202008.rar)