نمایش نتایج 1 تا 36 از 36

نام تاپیک: آموزش جامع Threading و مباحث مربوطه مثل synchronization

Threaded View

پست قبلی پست قبلی   پست بعدی پست بعدی
  1. #1

    آموزش جامع Threading و مباحث مربوطه مثل synchronization

    با سلام خدمت دوستان
    هدف بنده از ایجاد این تاپیک آموزش کامل برنامه نویسی چند نخی در vb.net هستش.
    برنامه نویسی چندنخی در ابتدا بسیار ساده بنظر می رسد ولی این را بدانید که این روش از برنامه نویسی ضمن اینکه برنامه شما را به شدت قوی و سریع و انعطاف پذیر می کند. نیاز به دقت بسیار زیادی در کدنویسی نیز دارد.

    Thread
    چیست؟
    برای اینکه مفهوم Thread را دریابیم ابتدا باید متوجه بشویم که برنامه ها در پردازشگر به چه صورتی اجرا می شوند.
    در گذشته همیشه در آن واحد امکان انجام یک کار وجود داشت (سیستم عامل داس را به یاد آورید) که پردازشگر منتظر می ماند تا به او پردازشی بدهند تا پردازش کند
    ولی با پیشرفت های نرم افزاری دانشمندان به این نتیجه رسیدند که این کار یعنی اسراف در منابع.چون در بسیاری از مواقع پردازش برنامه اجرایی پایان یافته و دیگر به پردازش نیاز ندارد و پردازشگر بیکار می ماند.
    از این رو روشی را ایجاد کردند که چندین کار به پردازشگر بدهند و پردازشگر با زمانبندی خاصی آن ها را انجام بدهد. این یعنی مثلا سه تا کار داریم. که پردازش هر کدام نیاز به 3 ثانیه زمان دارد.
    حال پردازشگر به مدت 1 ثانیه کار اول را انجام می دهد بعد به سراغ دومین کار می رود و به همین ترتیب.و بعد این کار را آنقدر تکرار می کند تا پردازش این کارها به اتمام برسد.
    به این روش سیستم multi tasking گویند.
    کمی جلوتر رفته و می بینیم که در این حالت چند نرم افزار بطور همزمان وجود دارند که پردازشگر در هر ثانیه وقتی به آن ها اختصاص می دهد.ولی در بعضی شرایط ممکن است اختصاص دادن یک واحد زمان به برنامه شما کم باشد.در این شرایط شما می توانید تعداد اجرای کد برنامه تان را توسط پردازشگر بیشتر کنید.در این حالت باید از Thread ها استفاده کنیم.
    ما می توانیم برای برنامه مان چندین Thread بسازیم که هر کدام در برنامه وظیفه ای را انجام دهند.
    فواید استفاده از
    Thread
    تصویر زیررا ببینید:

    همانطور که درتصویر می بینید در حافظه Ram سه پردازش وجود دارند:
    Explorer.exe با 5 Thread
    Virus.exe با 1 Thread
    Firefox.exe با 7 Thread
    همانطور که می بینید در بطور همزمان چند برنامه اجرا شده اند که هر کدام از آن ها دارای یک یا چندین Thread می باشند.
    برای مثال پردازش Firefox.exe را در نظر بگیرید:
    یکی از Threadهای آن برای دریافت متن html از اینترنت ،یکی برای ترجمه متن html به شکل گرافیکی،یکی برای دریافت تصاویر صفحه،یکی برای ... که بصورت همزمان انجام می شوند.
    حال کمی به عقب برگردیم و در نظر بگیریم که این ها همزمان اجرا نشوند بلکه ابتدا یک کار تمام شود بعد کار دیگر.
    در این حالت ابتدا باید تمامی صفحه html از اینترنت دریافت شود.
    سپس تمامی تصاویر آن.
    سپس تمامی متون html به شکل گرافیکی روی صفحه رسم شوند.
    در نتیجه نمایش یک صفحه عادی ممکن است چندین دقیقه به طول بیانجامد!

    به طور کلی در ذیل به چند فایده برنامه نویسی MultiThread نسبت به حالت Single Thread اشاره می کنیم:
    تکنیک های چندنخی می تواند پاسخ گویی رابط کاربری برنامه شما را در مقابل کاربر بیشتر کند.در واقع در حالی که یک سری عملیات در پس زمینه اجرا می شوند،رابط کاربری برنامه شما فعال و پاسخ گو باقی می ماند
    در حالی که یک Thread مشغول است پردازشگر می تواند به کار Thread های دیگر بپردازد.
    در حالی که پردازش های طولانی در پس زمینه اجرا شده است پردازش های کم مصرف می توانند به راحتی اجرا شوند.
    پردازش ها در هر لحظه ای از زمان می تواند Pause یا حتی به طور کامل متوقف شوند!
    شما می توانید اولویت هر Thread ای را به طور جداگانه با مقدارهای کم و زیاد تنظیم کنید که این کار باعث افزایش کارایی و قدرت برنامه می شود.

    اکنون که دریافتیم Thread چیست،نوبت استفاده از آن است:
    نحوه تعریف یک
    Thread:
    ابتدا یک تابع می سازیم و کدهایی که قصد اجرا کردن آن به صورت همزمان با برنامه اصلی را داریم را در آن می نویسیم.
    و سپس یک شی از کلاس Thread تعریف می کنیم.
    مثلا:
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim t AsNew Threading.Thread(AddressOf ConcurrentWork)
    t.Start()
    EndSub

    PrivateSub ConcurrentWork()
    WhileTrue
    'some works
    EndWhile
    EndSub
    در اینجا یک شی از کلاس Thread تعریف کردیم و آدرس تابع ConcurrentWork را به آن دادیم و بعد با استفاده از متد Start آن این کد را در یک واحد پردازشی جدا اجرا کردیم.
    همانطور که می بینید با اینکه این حلقه بی نهایت است ولی برنامه دچار حالت قفل شدن نمی شود.
    دلیل این است که برنامه و متعلقات آن در یک واحد پردازشی و حلقه بی نهایت ما در یک واحد پردازشی جداگانه اجرا می شود.
    اکنون بر دکمه ضربدر برنامه کلیک کنید تا برنامه بسته شود.اکنون خواهید دید فرم اصلی (Thread اصلی)برنامه بسته می شود ولی Thread ای که توسط ما ساخته شد و حلقه بی نهایت در آن اجرا می شود بسته نشده است.
    برای این که چنین شرایطی به وجود نیاید کافیست خاصیت IsBackground شی Thread را True تنظیم کنید.

    درس بعدی:معرفی اجزای کلاس Thread
    آخرین ویرایش به وسیله محسن شامحمدی : شنبه 14 اردیبهشت 1392 در 12:12 عصر

تاپیک های مشابه

  1. آموزش جامع کوئری ها
    نوشته شده توسط sajjad_kochekian در بخش Access
    پاسخ: 0
    آخرین پست: یک شنبه 04 بهمن 1388, 23:04 عصر
  2. دانلود 32 آموزش جامع در قالب یک فایل PDF
    نوشته شده توسط mmssoft در بخش برنامه نویسی در 6 VB
    پاسخ: 27
    آخرین پست: یک شنبه 21 تیر 1388, 23:09 عصر
  3. آموزش جامع دلفی
    نوشته شده توسط Delphi Skyline در بخش مقالات مرتبط با Delphi/Win32
    پاسخ: 3
    آخرین پست: شنبه 16 تیر 1386, 21:33 عصر

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •