معرفی Concurrency در زبان برنامه نویسی جاوا


یکی از تفاوت های عمده ی خانم ها و آقایان به میزان Concurrency در آن ها بر می گردد. پیش از توضیح پیرامون این مسئله دو تصویر زیر را با یکدیگر مقایسه می کنیم:

در تصویر فوق عکس آقایی را می بینیم که قصد دارد چند کار را به صورت هم زمان انجام دهد. همان طور که چهره این آقا نشان می دهد، کاملاً مشخص است که او چقدر در این کار موفق است! علت این مسئله هم آن است که اکثر آقایان دارای این ویژگی هستند که در لحظه فقط می توانند روی یک کار و نهایتاً دو کار متفاوت تمرکز کنند و این در صورتی است که اگر بیش از یک کار به ایشان تفویض شود، کیفیت کار ایشان به مراتب پایین خواهد آمد. حال ببینیم که این وضعیت در مورد خانم ها به چه شکل است:

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

به طور کلی API های موجود در ذهن خانم ها به صورت Concurrent (کانکارنت یا هم زمان) برنامه ریزی شده اند به این صورت که چندین کار به صورت هم زمان در چارچوب ذهنی خانم ها می تواند صورت پذیرد اما این در حالی است که ذهن آقایان اصلا Concurrent نیست (البته همیشه استثناء هایی وجود دارد.)

در زبان برنامه نویسی جاوا هم قضیه به همین صورت است. در حقیقت زبان جاوا از همان ابتدای شکل گیری دارای مفهومی تحت عنوان Concurrency بود. به عبارت دیگر طراحان این زبان برنامه نویسی قصد داشتند زبانی ایجاد کنند که در آن این امکان به برنامه نویسان و توسعه دهندگان داده شود که بتوانند به صورت هم زمان چندین ترد یا کار را در برنامه خود عملی سازند (لازم به ذکر است که در نسخه جاوای 5 به بعد، API های پیشرفته ای برای استفاده از مفهوم Concurrency در این زبان اضافه شده اند.)

مفهوم Concurrency در زبان جاوا دارای ارتباطی مستقیم با تعاملی تر شدن یک برنامه دارد. فرض کنیم که برنامه ما نیاز دارد تا یک فایل را از طریق شبکه دانلود کند سپس بعد از آن که فایل تکمیل شد اقدام به پخش آن فایل نماید. اگر برنامه ی ما Concurrent نباشد، می بایست مدت زمان قابل توجهی را بسته به حجم فایل صبر کنیم تا دانلود فایل تکمیل شود و پس از آن که فایل کاملاً تکمیل شد آن را پخش نماییم. اما اگر برنامه ی ما Concurrent باشد، این دو کار را به صورت هم زمان می توانیم انجام دهیم. به عبارت دیگر، زمانی که فایل دانلود می شود برنامه ی ما اقدام به پخش بخشی از فایل می کند که با موفقیت دانلود شده است. چنین امکانی تجربه کاربری بهتری را در اختیار کاربران قرار خواهد داد.

هر برنامه ی جاوا حداقل داری یک ترد است که تحت عنوان Main Thread یا «ترد اصلی» شناخته می شود و این ترد اصلی می تواند دیگر تردها را در خود جای دهد (همان طور که در آموزش های پیشین در مباحث مرتبط با تردها دیدیم، می توانیم چندین ترد را در متد main ایجاد کنیم و این در حالی است که این متد main را می توان به عنوان ترد اصلی برنامه خود نیز در نظر بگیریم.)

حال فرض کنیم که برنامه ای داریم که Concurrent است. به عبارت دیگر این برنامه حاوای چندین ترد است که هر کدام وظیفه دارند کار خاصی را انجام دهند. در شرایطی این چنین، می بایست ساز و کاری داشته باشیم که از تداخل عملکرد تردها جلوگیری به عمل آورد. بنابراین به مفهومی تحت عنوان Synchronization نیاز داریم. معادل فارسی این واژه «هم زمانی» است. در واقع، هم زمانی مابین تردها این اطمینان را به ما می دهد که مثلاً زمانی که یک ترد در حال ویرایش یک فایل است و یا ایجاد یک فایل جدید است، دیگر تردها امکان دسترسی به آن فایل را نداشته و می بایست منتظر بمانند تا کار آن ترد به اتمام برسد. علت به کارگیری از مفهوم Synchronization این است که هر دو ترد اطلاعات یکسانی را اصطلاحاً Share می کنند یا «به اشتراک می گذارند» بنابراین اگر به تردها اجازه دخالت در کار یکدیگر داده شود، می بایست انتظار مشکلاتی در برنامه خود را داشته باشیم.

لیست نظرات
کاربر میهمان
دیدگاه شما چیست؟
کاربر میهمان
nahid
nahid
عالی..............
M-Yall
M-Yall
کاش این بخش هم مثالی براش میذاشتین.کنجکاو بودم Concurrency تو یه پروژه ی ابتدایی چجوریه
کاربر میهمان
کاربر میهمان
چقد کوتاه...
چطور میشه فهمید تریدی که ایجاد کردیم جدا از ترید اصلی هست؟؟؟(اصطلاحا worker thread)
کاربر میهمان
کاربر میهمان
بعد از اون همه بخش سخت و زیاد تو این فصل دیگه مغزم داشت اتیش میگرفت که این بخش مثل آب شد براش