تبلیغات

مفهوم Thread در برنامه نویسی چیست؟!

سی شارپ

اگر دقت کرده باشید، دستورات (یا همان کدهای) نوشته شده، به صورت خط به خط اجرا می‌شوند! و برای مثال، اگر داخل یک حلقه (Loop) بیافتیم، تا زمانی که از حلقه خارج نشده باشیم، کدهای نوشته شده بعد از حلقه اجرا نخواهند شد! اما با استفاده از قابلیت مالتی-تردینگ (Multi-Threading)، می‌توانیم چند Thread تعریف کرده و هرکدام را برای کاری خاص اختصاص دهیم تا به صورت همزمان باهم پیش بروند! اما ترد (Thread) چیست؟!

Thread

چی؟! تعجب نکنید! بله! با جستجوی عبارت Thread، با تصاویر بالا رو به رو خواهید شد و یک عالمه نخ خواهید دید! اما یعنی چه؟!

بله! طبیعتا معنا و مفهوم آن در علوم کامپیوتر چیز دیگری خواهد بود! ما در بالا گفتیم که برای اینکه بتوانیم در برنامه معطل نمانیم تا یک کاری خاصی انجام گرفته و سپس بقیه‌ی قسمت‌های برنامه اجرا شود، بایستی چند ترد تعریف کرده و هرکدام از وظایف را به یکی از آن‌ها اختصاص دهیم! در این حالت، CPU وظیفه‌ی اجرای تمامی آنها را برعهده گرفته و مفهوم چندنخی (Multi-Threading) به وجود خواهد شد.

برای مثال، شما در نرم‌افزار IDM، در کنار اینکه به عملیات دانلود میپردازید، به انجام تعامل با رابط کاربری برنامه نیز مشغول هستید که توسط Thread اصلی ایجاد شده‌اند و اگر چنانچه عملیات دانلود توسط ترد دیگری صورت نگیرد، برنامه تا اتمام عملیات دانلود در حالت هنگ قرار خواهد داشت!

درک بهتری از ترد

اگر نگاهی به فعالیت‌های بدن انسان داشته باشیم، خواهیم دید که چندین فعالیت به طور موازی انجام می‌شوند که این عمل را همزمانی می‌نامیم؛ مغز ما در زمات صحبت‌کردن، متوجه رویدادهای دریافتی از حواس پنج گانه شده و در کنار آن نیز داخل بدن، قسمت‌های مختلف مستقل از هم و در کنار هم، سیستم بسیار پیچیده‌ای را تشکیل می‌دهند! به همین ترتیب، کامپیوترها نیز می‌توانند عملیات‌هایی را بطور همزمان انجام دهند!

سرعت پردازنده‌ها و به خصوص پردازنده‌های امروزی، بسیار زیاد بوده و به زمان‌های نانوثانیه‌ای می‌رسند! و در این هنگام وقتی دو ترد درون برنامه تعریف میکنیم، سی‌پی‌یو وظیفه دارد تا به هردو ترد برسد! به این صورت که ممکن است 2 میکرو نانوثانیه به ترد اول و 4 میکرو ثانیه به ترد دوم اختصاص دهد! همانند خانمی که موقع آشپزی، با تلفن حرف میزند! 😀

چند نخی

نوشتن برنامه‌های چندنخی دشوار است! گرچه مغز انسان می‌تواند کارها را بطور همزمان انجام دهد؛ ولی تعویض بین کارهای موازی دشوار است.

دو نوع چند وظیفه‌ای وجود دارد:

  • مبتنی بر فرآیند (process)
  • مبتنی بر نخ (thread)

پی بردن به تفاوت این دو مهم است.

پروسس، برنامه‌ای است که در حال اجراست. و چندوظیفه‌ای مبتنی بر فرآیند، خاصیتی است که به کامپیوتر اجازه می‌دهد دو یا چند برنامه، بطور همزمان اجرا شوند و در آن، برنامه کوچکترین واحد کد است که می‌تواند توسط زمانبند توزیع شود.

نخ، واحد قابل توزیعی از کد است. در محیط چند وظیفه‌ای مبتنی بر نخ،  تمام فرآیندها حداقل یک نخ دارند؛ ولی می‌توانند چند نخ داشته باشند. یعنی یک برنامه بطور همزمان می‌تواند دو یا چند کار را انجام دهد. بنابراین می‌توان گفت، چند وظیفه‌ای مبتنی بر فرآیند، اجرای همزمان برنامه‌ها را اداره می‌کند؛ در حالیکه چند وظیفه‌ای مبتنی بر نخ، با اجرای همزمان تکه‌هایی از یک برنامه سروکار دارد.

امتیاز اصلی چندنخی این است که میتوان از اوقات بیکاری که در اغلب برنامه‌ها وجود دارد، بطور کارآمد استفاده کرد.

حالتهای نخ

نخ می‌تواند در چندین حالت قرار داشته باشد:

  • می‌تواند در حال اجرا باشد؛
    مثل یک کارگر مشغول کار
  • می‌تواند آماده‌ی اجرا باشد؛ که CPU در اختیارش قرار خواهد گرفت؛
    مثل بک کارگر در آستانه‌ی دریافت دستور برای مشغول شدن به کار خود
  •  می‌تواند مسدود شود و منتظر منبعی بماند.
    مثل یک کارگبری که وسط کار خوابش برده – البته با اجازه‌‌ی ما
  • نخ خاتمه یافته
    مثل یک کارگری که وظیفه‌اش تمام شده است.

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

تبلیغات
0
کانال تلگرام فول کده
تبلیغات

درباره نویسنده

هادی اکبرزاده

[ مدیر فول کده ]

علاقه‌مند به اشتراک گذاری اطلاعات در هر زمینه‌ای / برنامه‌نویس

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

نظرات ثبت شده بدون دیدگاه