PDA

View Full Version : سوال: threading چیست و چه قدر در افزایش سرعت برنامه تاثیر میگذارد؟



mehrab1387
یک شنبه 11 دی 1390, 19:10 عصر
سلام
دوستان من با مفهوم نخ کشی در سیستم عامل اشنا هستم. می خواهم ببینم این کار در سی شارپ چطور انجام میشه و چقدر در سرعت برنامه تاثیر داره؟
من یه برنامه نوشتم :که شامل 9 تا موضوع است و هر موضوع 1000 سند دارد و هر سند به طور میانگین 100 کلمه دارد. یعنی 9000 سند دارم که به SQL انتقال داده ام و حالا باید برای هر کلمه موجود در این سند ها تعداد کل سندهایی که شامل این کلمه هست و نیز تعداد سندهای آن موضوع خاص که کلمه مورد نظر در آن بوده را بشمارم.یعنی جستجو روی 1000 سند و نیز دوباره روی 9000 سند.
دوستان این کار را کردم اما سرعتش خیلی پایینه و ساعت ها طول میکشه تا انجام بشه؟
به نظر شما چه کا رکنم؟تا سرعت بیشتر بشه؟
آیا این زیاد طول کشیدن طبیعی است؟
:گریه:

mehdin69
یک شنبه 11 دی 1390, 21:05 عصر
خب اگه می خواین با این بحث توی C# آشنایی پیدا کنین به این مقاله مراجعه کنین.
لینک مقاله (http://www.albahari.com/threading/)

اسماعیل ابراهیمی
یک شنبه 11 دی 1390, 21:10 عصر
به صورت خلاصه اینه که :

اگه می خوای چند کار رو توی برنامه ات به صورت همزمان انجام بدی از Thread استفاده میشه

دوم اینکه threading در بیشتر مواقع باعث کند شدن برنامه میشه تا سرعت بخشیدن به اون (چون CPU بین Thread ها یا نخ ها دائماً سوییچ می کنه)

موفق باشی

mehrab1387
یک شنبه 11 دی 1390, 21:27 عصر
من برای این برنامه چه کار کنم به نظر شما؟

Hybrid
یک شنبه 11 دی 1390, 21:39 عصر
به صورت خلاصه اینه که :

اگه می خوای چند کار رو توی برنامه ات به صورت همزمان انجام بدی از Thread استفاده میشه

دوم اینکه threading در بیشتر مواقع باعث کند شدن برنامه میشه تا سرعت بخشیدن به اون (چون CPU بین Thread ها یا نخ ها دائماً سوییچ می کنه)

موفق باشی

سلام ،
چند تاری یا چند نخی ، توانایی یه برنامه به تقسیم شدن به چند تار(زیر برنامه) گفته میشه .که میتونند به طور جداگانه ولی همزمان توسط برنامه اجرا بشن.یک رایانه چند پرداز(مثلا سی پی یو 3 هسته ای داره!) میتونه همزمان دو یا چند تار را اجرا کند که به معنی اجرای زودتر کل برنامه نسبت به رایانه تک‌پرداز است.
بر روی یک رایانه تک‌پردازنده یک برنامه چند تاری زودتر اجرا نمی‌شود. نرم‌افزارهای سنتی تک‌تار بر روی سیستم‌های چندپردازنده سریع‌تر اجرا نمی‌شوند زیرا ان نرم‌افزارها در هر زمان می‌توانند تنها یک پردازنده را به کار بگیرند.آقای اسماعیل ابراهیمی مطمئنین که چند نخی باعث کند شدن برنامه میشه؟؟

mmd2009
یک شنبه 11 دی 1390, 22:15 عصر
off topic



سلام ،
چند تاری یا چند نخی ، توانایی یه برنامه به تقسیم شدن به چند تار(زیر برنامه) گفته میشه .که میتونند به طور جداگانه ولی همزمان توسط برنامه اجرا بشن.یک رایانه چند پرداز(مثلا سی پی یو 3 هسته ای داره!) میتونه همزمان دو یا چند تار را اجرا کند که به معنی اجرای زودتر کل برنامه نسبت به رایانه تک‌پرداز است.

با سلام.

چند نخی ( multi threading ) اصلا هم زمان نیست. بلکه وظیفه های اینقدر سریع به هم پاس داده میشن که شما فکر می کنید اینا هم زمان هستند. و در شرایط کلی ربطی به هسته های cpu نداره و یک هسته هم این قابلیت رو داره که این کارو به سرعت انجام بده .

اون چیزی که همزمان اجرا میشه تکنولوژی parallel هست که تعداد هسته ها برای موازی کار کردن براش مهم هستند و هر چقدر تعداد هسته ها بیشتر باشه سرعت برنامه بیشتر میشه. اگر شما به دنبال این هستید که از تمامی هسته های cpu به صورت موازی استفاده بکنید فقط باید از این تکنولوژی استفاده بکنید. البته این تکنولوژی در همه موارد هم باعث افزایش سرعت نمیشه. البته یاداور میشم که این تکنولوژی کاراییش زمانی مشخص میشه که cpu ما دارای چندین هسته باشه و نه تنها یک هسته...

خب مسئله رو با یک مثال روشن میکنم

فرضا برای محاسبه جمع فاکتوریل یک عدد از کدهای زیر استفاده کردم در حالت موازی :


long sum = 0;
Parallel.For(1, 50001, () => 0L, (i, state, local) =>
{
long result = 1;

for (long j = 1; j <= i; j++)
{
result = result*j;
}
return local + result;
}, local => { sum += local; });


حالا این کد رو هم در حالت عادی استفاده کردم :



long sum = 0;

for (long i = 1; i <= 50000; i++)
{
long result = 1;

for (long j = 1; j <= i; j++)
{
result = result * j;
}
sum = sum + result;
}




تفاوت سرعت برای من اشکار بود. البته به نظر من برای درک بهتر این موضوع یک کتاب خونده بشه بهتره.

موفق باشید

اسماعیل ابراهیمی
یک شنبه 11 دی 1390, 22:30 عصر
بله جناب The Life

اگر شک دارید به این لینک (http://stackoverflow.com/questions/2856239/will-multi-threading-increase-the-speed-of-the-calculation-on-single-processor) مراجعه کنید

ضمناً منظور بنده سی پی یو ساده بود .(نه چند هسته ای)