Multithreading in java--Introduction

یکی از مفاهیم خیلی خیلی مهم در برنامه نویسی مبحثی قشنگ و باحالی هست به نام چند نخی ! اما چرا قشنگ و باحال در پایان این سلسله آموزش متوجه میشیم :)

یک فهرست و راهنما کلی از این سلسله آموزش که چی قرار یادبگیریم :

  • Introduction
  • How to create thread
  • Callable and Future
  • Thread Pool
  • Concurrency
  • Executor framework
  • Fork/Join framework
  • IPC Mechanism

Introduction

خب در این بخش از این آموزش قراره به چند سوال زیر جواب بدیم :

  1. اصلا نخ چیه ؟
  2. چرا ؟ و کجا باید از نخ استفاده کنیم ؟
  3. چه تعداد نخ مجاز است ؟

جواب سوال 1 :

برای توضیح فرآیند و نخ وارد جزئیات نمیشیم قطعا برای جزئیات بیشتر منابع خوب فارسی موجود است

اما به بیان کلی ،نخ قسمتی از کد ما است (خودمون اون قسمتو انتخاب میکنیم ) که موازی با بقیه کد های ما اجرا می شود (شاید موازی اجرا شدن خیلی خیلی دقیق نباشد ولی در اینجا نیازی به مطرح کردن جزئیات نیست!) . زمانی که یک اپ جاوا اجرا می شود JVM میاد یک نخ اصلی (Main Thread) که برنامه ما کارشو اونجا شروع میکن و چند نخ دیگر را در حالت Daemon اجرا می کند (بعدا در مورد Daemon بحث می کنیم) از جمله این نخ ها GC یا همون آشغال جمع کن معروف در جاوا است !

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

نخ ها در طول حیات خودشون که دارن وظیفه ای برای ما انجام میدن حالت های مختلفی دارند که دونستن این حالت ها کمک بسیاری در برخورد صحیح ما با اونا میکن !!

چرخه حیات نخ
چرخه حیات نخ

اما به صورت دقیق تر با این حالت ها در بخش بعدی آشنا میشیم .


جواب سوال 2 :

چرا ؟ و کجا باید از نخ استفاده کنیم ؟

استفاده صحیح از نخ باعث افزایش سرعت و کارایی اپ شما میش ولی مسلما همیشه اینطور نیست ! برخی از کارها ذاتا قابل تقسیم نیستن که بتونین جدا و مستقل از هم اجرا کنید پس باید مراقب باشین این هزینه سربار ایجاد نخ ارزششو داره یا نه ! معمولا کارهای I/O و همچنین برخی کارهای Cpu bound باید در نخی جداگانه اجرا بشوند و نتیجرو فقط به نخ اصلی برگردانند.

جواب سوال 3 :

چه تعداد نخ مجاز است ؟

تعداد نخ مجاز به پارامتر های مختلفی مثل حافظه و cpu ، jvm ، OS و... وابسته است پس تعداد مشخصی وجود ندارد ،ولی همانطور که در بالا هم گفتیم باید تعداد نخ متناسب باشد چون ایجاد هر نخ برای اپ ما سربار ایجاد می کند . این تعداد تقریبا به شکل زیر می باشد :

Cpu Bound = processorCount + 1

I/O Bound = processorCount * ( 1 + wait time/service time)


موفق باشید :)