Software engineer
Multithreading in java--Introduction
یکی از مفاهیم خیلی خیلی مهم در برنامه نویسی مبحثی قشنگ و باحالی هست به نام چند نخی ! اما چرا قشنگ و باحال در پایان این سلسله آموزش متوجه میشیم :)
یک فهرست و راهنما کلی از این سلسله آموزش که چی قرار یادبگیریم :
- Introduction
- How to create thread
- Callable and Future
- Thread Pool
- Concurrency
- Executor framework
- Fork/Join framework
- IPC Mechanism
Introduction
خب در این بخش از این آموزش قراره به چند سوال زیر جواب بدیم :
- اصلا نخ چیه ؟
- چرا ؟ و کجا باید از نخ استفاده کنیم ؟
- چه تعداد نخ مجاز است ؟
جواب سوال 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)
موفق باشید :)
مطلبی دیگر از این انتشارات
کدام لایسنس را انتخاب کنیم؟
مطلبی دیگر از این انتشارات
چطور برنامه نویس بدی باشیم؟
مطلبی دیگر از این انتشارات
تجربه نوشتن ادیتور متنی تحت ترمینال با جاوای خالص