PDA

نسخه کامل مشاهده نسخه کامل : سوال: علت نامگذاری asynchronous یا برنامه نویسی غیر همزمان



Mr.World.Wide
26-01-2018, 00:10
دوستان یه سوالی تو ذهنم اومده
من برنامه نویسی همزمان و غیر همزمان رو میدونم چیه
فقط سوال درباره کلمه ها هستش

اونم اینه که چرا میگیم همزمان؟؟
در برخورد اول وقتی که من کلمه همزمان رو میشنوم به ذهنم خطور میکنه که خب یعنی به صورت همزمان چند برنامه اجرا بشه
یا به صورت همزمان چند متد اجرا بشه
یا به صورت همزمان چند رشته اجرا بشه
ولی این ویژگی برنامه نویسی غیر همزمان هست

خب غیر همزمان با چی؟
یعنی دو تا متد در دو زمان متفاوت اجرا میشه؟؟؟
خب وقتی متد بلاک بشه تا رشته ما بره و متد دوم رو انجام بده و بعد برگرده متد اول رو ادامه بده ، در اینجا متد اول و دوم غیر همزمان هستند
یعنی در دو زمان متفاوت اجرا شدند
در حالیکه اگر هر دو متد با هم اجرا بشه در دو رشته مختلف خب یعنی همزمان هستند!!!


متوجه شدید منظورم چیه؟
یعنی من میگم باید به برنامه نویسی همزمان بگن غیر همزمان
و به غیر همزمان بگن همزمان
یعنی انگاری کلمه ها جا به جا استفاده شده

یا اینکه به خاطر زبان فارسی اینجوری معنی میده؟؟
یا کلا علت نام گذاری چیز دیگه ایه؟؟

شما حتی در معنی کلمه asynchronous هم اگر دقت کنید این رو نوشتند:
not going at the same rate and exactly together with something else, in particular.
not existing or happening at the same time.

یعنی میگه دو چیزی که همزمان با هم نباشند
با همدیگه اجرا نشند
خب ولی برنامه نویسی asynchronous یعنی متد های ما یا وظیفه های ما به صورت همزمان اجرا بشند
یعنی ما چندتا thread داشته باشیم که همزمان با هم یه بخشی از برنامه ما رو اجرا کنه

وقتی که همزمانی وجود داره چرا خب بهش میگن asynchronous؟؟؟

ممنون میشم دوستان راهنمایی کنن

Msba
26-01-2018, 12:46
این را که گفتید تفاوت آن ها را می دانید را خوانده ام اما در توضیحات زیر به ناچار مجبور به تعریف های پیوسته از این دو لفظ هستم.
لفظ Sync، در لغت به معنای همزمان هست اما نه به معنای همزمان! (همون مشکل فارسیه) بهتره به جای همزمان از یک معنای اصطلاحی استفاده کنیم و بگوییم همگرا.
همان طور که می دانید در برنامه های Sync، خطوط برنامه به صورت ترتیبی و پیوسته انجام می شود یعنی تا زمانی که خطی اجرا نشود خطوط بعدی اجرا نمی شود. این همگرایی ترتیبی رو Sync گویند.
اگر بخواهیم از همان لفظ همزمان استفاده کنیم، باید همزمان را از این زاویه ببینیم که یک بردار زمان برای آن ها وجود دارد و زمان های آن ها وابسته به هم هست. (بردار زمان برای کد ها، همان Thread هست).
در مقابل کد های Async، دارای بردار های زمان مختلف هستند و ترتیب اجرای کد ها در دو بردار زمانی ارتباطی با هم ندارند. این عدم ارتباط باعث شده که لفظ Async استفاده شود.
از طرفی آن تعریف شما که اجرای چندین کد با هم هست رو در برنامه نویسی علاوه بر Async، با Parallel نیز می شناسند. یعنی موازی، در کنار هم، که هیچ نقطه تلاقی ندارند.



یعنی دو تا متد در دو زمان متفاوت اجرا میشه؟؟؟


خب وقتی متد بلاک بشه تا رشته ما بره و متد دوم رو انجام بده و بعد برگرده متد اول رو ادامه بده ، در اینجا متد اول و دوم غیر همزمان هستند


یعنی در دو زمان متفاوت اجرا شدند


در حالیکه اگر هر دو متد با هم اجرا بشه در دو رشته مختلف خب یعنی همزمان هستند!!!


همان طور که در بالا گفتم، دیدگاه نسبت به زمان و همزمانی از نظر اجرا نیست از نظر ترتیب هست. به همان بردار زمان دقت کنید.

یک حالت خاص را بگویم که احساس می کنم در توضیحات شما پنهان است، ممکن است در برنامه یک Thread ایجاد شود و Thread ایجاد کننده بلافاصله منتظر اتمام Thread ساخته شده شود (Join)، در این حالت گرچه بردار زمان کد جدا می شود و برنامه در نگاه اول Async می شود، اما انتظار اتمام کد در Thread اول، باعث همزمانی ترتیبی بین دو Thread می شود. در واقع یکی از روش های Sync بین Thread ها همین Join هست.
یکی از معناهای اصطلاحی دیگر Sync که در کد های Async وجود دارد، تطابق زمانی است. یعنی اگر روند اجرای یک Thread وابسته به Thread دیگر باشد (مانند مثال بالا) می بایست توسط برنامه نویس یک Sync بوجود آید (تطابق زمانی)
بهتر است (خودم هم همین کار رو می کنم) برای Multi Threading و اجرای کد های موازی در کنار هم از لفظ Parallel استفاده شود چنانکه در توضیحات Threading در مستندات راهنما مانند ویکی ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ](computing)) از همین لفظ استفاده می کنند.
Parallel اصطلاحات دیگری نیز دارد که حالات Sync را داراست مانند کلاس Parallel در Task مربوط به Net. که با کد برنامه Sync (به معنای همگرایی ترتیبی) می شود.
در ساده ترین نوع تعریف هم می توان گفت Sync یعنی وابسته به هم در اجرا و Async یعنی عدم وابستگی به هم در زمان اجرا!

موفق باشید.