PDA

View Full Version : سوال: فرق بین Multi Threading و Parallel Programming و Asynchronous Programming



maJJJid
سه شنبه 15 مرداد 1392, 23:28 عصر
دوستان لطفا بگین هر کدوم از اینا یک مبحث جداگونه هستند یا همشون یکی هستند کدوم یک جدید تر و با ویژگی های جدید هستند.دوستان لطفا اطلاعات جامعی از اینا بدین.من خیلی سرچ زدم گیج شدم.
من میخام با تردینگ تو برنامم کار کنم.حالا نمی دونم برم سراغ کدوم یکی از اینا ؟

bomb23
سه شنبه 15 مرداد 1392, 23:47 عصر
سلامبروسراغ Multi Threading یعنی برنامتو میدی دست چند تا نخ و اونا هم زمان انجامش میدن. Multi Threading زیر مجموعه Parallel Programming هستش. Asynchronous Programming هم که میشه حالت عادی سی شارپ اول یه کارو انجام میده وقتی تموم شد میره سراغ بعدی.

maJJJid
سه شنبه 15 مرداد 1392, 23:57 عصر
سلامبروسراغ Multi Threading یعنی برنامتو میدی دست چند تا نخ و اونا هم زمان انجامش میدن. Multi Threading زیر مجموعه Parallel Programming هستش. Asynchronous Programming هم که میشه حالت عادی سی شارپ اول یه کارو انجام میده وقتی تموم شد میره سراغ بعدی.

سلام.ممنونم.دوست عزیز " حالت عادی سی شارپ که اول یه کارو انجام میده و وقتی تموم شد میره سراغ بعدی " Synchronous Programming هستش نه Asynchronous Programming.

bomb23
چهارشنبه 16 مرداد 1392, 00:05 صبح
Synchronous Programming یعنی برنامه نویسی همزمان! سی شارپ در حالت عادی غیر همزمان اجرا میشه! پس در حالت عادی Asynchronous Programming isja!

maJJJid
چهارشنبه 16 مرداد 1392, 00:13 صبح
Synchronous Programming یعنی برنامه نویسی همزمان! سی شارپ در حالت عادی غیر همزمان اجرا میشه! پس در حالت عادی Asynchronous Programming isja!

برعکس میگی دوست عزیز.یه سرچ کوچولو بکن.

bomb23
چهارشنبه 16 مرداد 1392, 00:23 صبح
حق با شما بود :D از دروس قدیمی ما بود منم تحت الفظی معنی کردم این خارجیام که شوتن یه چی معنی میکنن یه چی دیگه مینویسن.

maJJJid
چهارشنبه 16 مرداد 1392, 10:15 صبح
از اساتید بزرگ کسی نیست کمک کنه ؟؟؟

esafb52
چهارشنبه 16 مرداد 1392, 10:32 صبح
شما کتاب برنامه نویسی موازی با سی شارپ ترجمه محمد زحمت کش که تو قسمت منابع ومراجع تالار صفحه 3 موجود هست رو مطالعه کنید فکر کنم بتونه بهتون کمک کنه

maJJJid
چهارشنبه 16 مرداد 1392, 11:38 صبح
شما کتاب برنامه نویسی موازی با سی شارپ ترجمه محمد زحمت کش که تو قسمت منابع ومراجع تالار صفحه 3 موجود هست رو مطالعه کنید فکر کنم بتونه بهتون کمک کنه

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

maJJJid
چهارشنبه 16 مرداد 1392, 12:29 عصر
دوستان کسی نیست کمک کنه !!!

gwbasic
چهارشنبه 16 مرداد 1392, 12:39 عصر
Multi Threading رو که حتما می دونید یعنی استفاده از چند Thread برای اجرای برنامه اما این Thread ها لزوما به صورت همزمان انجام نمی شوند (بر اساس ساختار پردازنده) بلکه این پردازنده هست که Multi Thread رو پشتیبانی می کند و در پشت صحنه خودش این موضوع را مدیریت می کند و در لحظه یک Thread را اجرا می کند و سپس این Thread را معلق و Thread دیگری را اجرا می کند پس بطور خلاصه در لحظه یک Thread اجرا می شود اما با جابجایی در بازه های زمانی بین Thread ها این مسئله تداعی می شود که چند Thread با هم کار می کنند
حالا Async و Parallel در پشت صحنه از Thread ها استفاده می کنند اما فرق این دو در این است که در صورت چند هسته ای بودن پردازنده در Parallel از تمام هسته ها استفاده می شود و نکته اینجاست که واقعا چون چند هسته مستقل هستند بنابراین کارها به صورت موازی انجام می شود

maJJJid
چهارشنبه 16 مرداد 1392, 14:42 عصر
Multi Threading رو که حتما می دونید یعنی استفاده از چند Thread برای اجرای برنامه اما این Thread ها لزوما به صورت همزمان انجام نمی شوند (بر اساس ساختار پردازنده) بلکه این پردازنده هست که Multi Thread رو پشتیبانی می کند و در پشت صحنه خودش این موضوع را مدیریت می کند و در لحظه یک Thread را اجرا می کند و سپس این Thread را معلق و Thread دیگری را اجرا می کند پس بطور خلاصه در لحظه یک Thread اجرا می شود اما با جابجایی در بازه های زمانی بین Thread ها این مسئله تداعی می شود که چند Thread با هم کار می کنند
حالا Async و Parallel در پشت صحنه از Thread ها استفاده می کنند اما فرق این دو در این است که در صورت چند هسته ای بودن پردازنده در Parallel از تمام هسته ها استفاده می شود و نکته اینجاست که واقعا چون چند هسته مستقل هستند بنابراین کارها به صورت موازی انجام می شود


ممنونم استاد عزیز.
- اینکه میگین " در صورت چند هسته ای بودن پردازنده در Parallel از تمام هسته ها استفاده می شود و نکته اینجاست که واقعا چون چند هسته مستقل هستند بنابراین کارها به صورت موازی انجام می شود " منظورتون از اینکه میگین " کارها به صورت موازی انجام می شود " یعنی چند ترد بصورت همزمان در عان واحد توسط چند هسته CPU پردازش می شود ؟
- Async و Parallel یعنی دو روش برنامه نویسی برای کار با Multi Threading هستش ؟
- پس Async چیه و فرق بین Async و Parallel چی میشه ؟
با تشکر.

gwbasic
چهارشنبه 16 مرداد 1392, 17:02 عصر
ببینید Parallel در .net 4 اضافه شده و لایه ای روی Threading هست و این امکان رو می ده که از تمام هسته های CPU استفاده بشه پس زیر بناش همان Thread هست. نکته همون استفاده از چند هسته هست
108689

maJJJid
چهارشنبه 16 مرداد 1392, 21:22 عصر
ببینید Parallel در .net 4 اضافه شده و لایه ای روی Threading هست و این امکان رو می ده که از تمام هسته های CPU استفاده بشه پس زیر بناش همان Thread هست. نکته همون استفاده از چند هسته هست
108689

ممنونم استاد عزیز.فقط متوجه نشدم پس کاربرد Asynchronous Programming که در دات نت 4.5 اضافه شده کجاست ؟
Async بر عکس Parallel هست که در صورت چند هسته ای بودن پردازنده از تمام هسته ها استفاده نمی شود و کار ها بصورت موازی انجام نمی شود ؟
منظورتون رو از اینکه در Parallel کار ها بصورت موازی انجام میشه رو نمی فهمم.خوب قبلا هم در Multi Threading کار ها بدون Parallel موازی انجام میشد. !

tooraj_azizi_1035
چهارشنبه 16 مرداد 1392, 23:09 عصر
Async هم پردازش موازی محسوب میشه اما با روشی دیگه.
شما برای اینکه یک UI پاسخگو داشته باشید باید از رویکرد Async استفاده کنید. Async در حقیقت یک کار طولانی رو روی تردی دیگه اجرا می کنه و اجازه میده برنامه به روند اجرای خودش ادامه بده و کاربر همچنان بتونه با برنامه تعامل داشته باشه. هر کار زمان بری رو می تونید با نوشتن یک متد Asyncروی تردی دیگر انجام دهید.
اگر ادامه برنامه وابسته به مقدار برگشتی متد مربوطه باشه باید از await استفاده کنید تا بقیه کد به شکل Callback پس از اتمام اجرای Async فراخونی بشه البته همگی روی تردی غیر از UI.
باید در عمل از این کلمه کلیدی استفاده کنی تا متوجه عملکردش بشی.

maJJJid
پنج شنبه 17 مرداد 1392, 00:01 صبح
Async هم پردازش موازی محسوب میشه اما با روشی دیگه.
شما برای اینکه یک UI پاسخگو داشته باشید باید از رویکرد Async استفاده کنید. Async در حقیقت یک کار طولانی رو روی تردی دیگه اجرا می کنه و اجازه میده برنامه به روند اجرای خودش ادامه بده و کاربر همچنان بتونه با برنامه تعامل داشته باشه. هر کار زمان بری رو می تونید با نوشتن یک متد Asyncروی تردی دیگر انجام دهید.
اگر ادامه برنامه وابسته به مقدار برگشتی متد مربوطه باشه باید از await استفاده کنید تا بقیه کد به شکل Callback پس از اتمام اجرای Async فراخونی بشه البته همگی روی تردی غیر از UI.
باید در عمل از این کلمه کلیدی استفاده کنی تا متوجه عملکردش بشی.

ممنونم مهندس.روشن شدم.شرمنده در مورد Async مقاله فارسی ندارین ؟

gwbasic
پنج شنبه 17 مرداد 1392, 02:11 صبح
asynchronous programming از قبل موجود بود Parallel در دات نت 4 اضافه شده. قبلا به دلیل اینکه پردازنده های چند هسته ای وجود نداشت بنابراین Parallel هم به معنی واقعی وجود نداشت. یک نکته رو دقت کنید پایه همه اینها Thread هستند اما وقتی چند Thread در یک پردازنده تک هسته ای اجرا بشه. سیستم عامل اجرای Thread ها رو با تقسیم بازه زمانی به این Thread ها انجام می ده یعنی اول فرضا Thread1 پردازش می شه بعد از یک برش زمانی این Thread به حالت تعلیق در میاد و Thread2 پردازش می شه و همینطور این Context Switching یعنی جابجا شدن پردازش Thread ها در بازه های زمانی انجام می شه تا کار به پایان برسه. در حقیقت این سیستم عامل هست که پردازش همزنان Thread ها رو شبیه سازی می کنه اما در پردازنده های چند هسته ای چون هسته ها کاملا مستقل از هم هستند بنابراین می تونن Thread ها رو بصورت کاملا همزمان انجام بدن این همزمانی واقعی هست نه شبیه سازی شده توسط سیستم عامل یعنی هسته یک وقتی داره Thread1 رو اجرا می کنه همزمان هسته 2 داره Thread2 رو اجرا می کنه
امیدوارم موضوع جا افتاده باشه

maJJJid
پنج شنبه 17 مرداد 1392, 08:26 صبح
asynchronous programming از قبل موجود بود Parallel در دات نت 4 اضافه شده. قبلا به دلیل اینکه پردازنده های چند هسته ای وجود نداشت بنابراین Parallel هم به معنی واقعی وجود نداشت. یک نکته رو دقت کنید پایه همه اینها Thread هستند اما وقتی چند Thread در یک پردازنده تک هسته ای اجرا بشه. سیستم عامل اجرای Thread ها رو با تقسیم بازه زمانی به این Thread ها انجام می ده یعنی اول فرضا Thread1 پردازش می شه بعد از یک برش زمانی این Thread به حالت تعلیق در میاد و Thread2 پردازش می شه و همینطور این Context Switching یعنی جابجا شدن پردازش Thread ها در بازه های زمانی انجام می شه تا کار به پایان برسه. در حقیقت این سیستم عامل هست که پردازش همزنان Thread ها رو شبیه سازی می کنه اما در پردازنده های چند هسته ای چون هسته ها کاملا مستقل از هم هستند بنابراین می تونن Thread ها رو بصورت کاملا همزمان انجام بدن این همزمانی واقعی هست نه شبیه سازی شده توسط سیستم عامل یعنی هسته یک وقتی داره Thread1 رو اجرا می کنه همزمان هسته 2 داره Thread2 رو اجرا می کنه
امیدوارم موضوع جا افتاده باشه

بله.خیلی ممنونم از شما آقای مهندس.فکر میکنم این مطالب واسه بقیه دوستان هم خیلی مفید هست.

maJJJid
پنج شنبه 17 مرداد 1392, 09:19 صبح
Async همون Asynchronous Programming هستش یا جداست ؟
اساتید مقاله ای فارسی یا انگلیسی سراغ ندارین واسه Async ؟
با تشکر.

gwbasic
پنج شنبه 17 مرداد 1392, 19:43 عصر
Asynchronous Programming همون برنامه نویسی هم زمان هست مد در پست هام به اختصار Async نوشتم
اما async , await دو کلید واژه جدید است که در دات نت 4.5 اضافه شده و کار برنامه نویسی همزمان و کار با Thread ها رو بسیار ساده تر کرده. دقت کنید که در دات نت 4 و 4.5 برای کار با thread ها کتابخانه های بسیاری اضافه شده است که شما براحتی با کد کمتر بتونید با Thread ها کار کنید. اینها یک لایه ای روی Thread کلاسیک هستند و دیگه کمتر نیاز هست برای ایجاد Thread و کار با آن از روش سنتی استفاده کرد در عوض می تونید از کلاس Task و Parallel و ... استفاده کنید

maJJJid
پنج شنبه 17 مرداد 1392, 21:25 عصر
Asynchronous Programming همون برنامه نویسی هم زمان هست مد در پست هام به اختصار Async نوشتم
اما async , await دو کلید واژه جدید است که در دات نت 4.5 اضافه شده و کار برنامه نویسی همزمان و کار با Thread ها رو بسیار ساده تر کرده. دقت کنید که در دات نت 4 و 4.5 برای کار با thread ها کتابخانه های بسیاری اضافه شده است که شما براحتی با کد کمتر بتونید با Thread ها کار کنید. اینها یک لایه ای روی Thread کلاسیک هستند و دیگه کمتر نیاز هست برای ایجاد Thread و کار با آن از روش سنتی استفاده کرد در عوض می تونید از کلاس Task و Parallel و ... استفاده کنید


سپاسگذارم از راهنمایی هاتون.مسیر روشن شد.فقط مقاله ای فارسی یا انگلیسی سراغ ندارین واسه Async ؟
خیلی خیلی ممنون.

maJJJid
جمعه 18 مرداد 1392, 13:40 عصر
اساتید بزرگوار مقاله ای فارسی یا انگلیسی سراغ ندارین واسه Async ؟

gwbasic
شنبه 19 مرداد 1392, 11:22 صبح
آقای Joseph Albahari مقاله و کتاب خوبی در این لینک (http://www.albahari.com/threading/) در این زمینه دادن

maJJJid
شنبه 19 مرداد 1392, 21:10 عصر
خیلی ممنون از شما.

sibooy
دوشنبه 11 شهریور 1392, 16:17 عصر
فقط دوستان یک نکته رو توجه داشته باشید که فرق برنامه نویسی موازی با الگوریتم های موازی بسیار زیاده.
شما از طریق برنامه نویسی موازی یک الگوریتم موازی رو با یک محیط برنامه نویسی خاص، برای یک معماری پردازنده خاص، می نویسید تا اون الگوریتم موازی، بصورت موازی اجرا بشه.
می تونید به کتاب مقدمه ای بر الگوریتم های موازی نوشته دکتر بهروز پرهامی(البته انگلیسی هست) مراجعه کنید.
درمورد برنامه نویسی موازی با پردازنده های چندهسته ای و پردازنده های گرافیکی به وسیله OpenMP و CUDA توی این لینک مطلب گذاشتم.
http://barnamenevis.org/showthread.php?414780-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D9%85%D9%88%D8%A7%D8%B2%DB%8C-%D8%AF%D8%B1-C-%D8%A8%D8%A7-%D9%BE%D8%B1%D8%AF%D8%A7%D8%B2%D9%86%D8%AF%D9%87-%D9%87%D8%A7%DB%8C-%DA%86%D9%86%D8%AF-%D9%87%D8%B3%D8%AA%D9%87-%D8%A7%DB%8C%D8%8C-%D9%BE%D8%B1%D8%AF%D8%A7%D8%B2%D9%86%D8%AF%D9%87-%D9%87%D8%A7%DB%8C-%DA%AF%D8%B1%D8%A7%D9%81%DB%8C%DA%A9-%D9%88-%DA%86%D9%86%D8%AF-%D9%BE%D8%B1%D8%AF%D8%A7%D8%B2%D9%86%D8%AF%D9%87-%D8%A7%DB%8C
اگر دوستان مطلب جدیدی دارن یا نکته ای توی این لینک بذارید تا خلایق استفاده کنن.