فرق بین performance, concurrency و parallelism

جا داره این سه مطلب مهم و توضیح بدیم تا از کلمه سرعت به طرز کلی صحبت نکنیم
Performance: سرعت برای مثال زمان تکمیل شدن یک در خواست از ابتدا تا پایان
Concurrency یعنی کدی که فرمان های ان کاملا جداگانه از هم کار میکنند. مثلا اگر ما از چند website درخواست بگیریم اگر هر درخواست برای قبلی صبرکنه تا شروع بشه blocking این کد concurrent نیست اما اگرهر درخواست جدا باشه و به تکمیل درخواست دیگه کاری نداشته باشه asynchronous /nonblocking این کد concurrent هست

Parallelism اجرای همزمان فرمان که لزوما نیاز به چندین thread و CPU هست
اگر کد concurrent باشه اما ما یک thread فقط داشته باشیم با اینکه درخواست ها جدا هستند اما فقط یک در خواست میشه در هر لحظه انجام داد این سیستم parallel نیست اما اگر بیشتر از یک core داشته باشیم هر درخواست به یک thread ازاد تعلق داده میشه و سیستم به parallelism میرسه چون درخواست ها همزمان پروسه میشه

10 پسندیده

میشه در مورد asynchronous بیشتر توضیح بدین واقعاً هنوز نتونستم اینو خوب بفههم

به مثال پایین نگاه کنید. در حالت اول یک ثانیه صبر میکنیم بعد شماره بعدی و پرینت میکنیم این کد blocking یا synchronous هست چون تا فرمان قبلی کامل نشه به فرمان بعدی حلقه نمیره در نتیجه تمام شماره ها به ترتیب در خروجی میاد ولی ۵ ثانیه صبر میکنیم


در مثال پایین از concurrent ruby استفاده کردم و هر فرمان در یه future که کاملا جداگانه اجرا میشه کار میکنه یعنی صبر نمیکنه که فرمان قبلی تمام بشه و هرfuture هر چه زود تر تونست فرمان و. اجرا کنه انجام میده و جواب و برمیگردونه در نتیجه خروجی ترتیب شماره ها رو حفظ نمیکنه اما همه به صورت مجزا اجرا میشن که در کل زمان اجرا یک کم بیشتر از یک ثانیه هست این کد asynchronous یا nonblocking و concurrent هست
`

(1..5).map { |number| Concurrent::Future.execute { sleep(1);puts number } }.map(&:value)
5
2
3
1
4
4 پسندیده

واقعاً ممنون تو کلی جای دیگه خونده بودم انقدر ساده و روان نبودن و همیشه قاطی می کردم .
معنای asynchronous میشه غیر همزمان
معنای synchronous هم میشه همزمان
مشکل من دقیقاً تو معنای این هاست اصولاً "synchronous " تو این باید شماره ها قاطی باشن چون اسمش روشه و همزمان هست.
در "asynchronous " غیرهمزمان هم که بازم اسمش روشه فرمان ها باید به طور غیر همزمان اجرا بشن و تا اجرای فرمان بعدی منتظر باشن.
حتی دقت کنید شما هم داخل جملاتتون از کلمه همزمان برای asynchronous استفاده کردین و گفتین تو asynchronous دستورها به صورت همزمان اجرا میشن.به صورت همزمان باید synchronous باشه نه asynchronous با توجه به معنای لغوی اینا

و جواب و برمیگردونه در نتیجه خروجی ترتیب شماره ها رو حفظ نمیکنه اما همه به صورت همزمان اجرا میشن که در کل زمان اجرا یک کم بیشتر از یک ثانیه هست این کد asynchronous یا nonblocking و

حالا مشکل من دقیقاً تو معنای ایناس که همیشه قاطی می کنم و فکر می کنم تو asynchronous تا اجرای دستور بعدی منتظر می مونه چون اسمش روشه غیر همزمان هست و تو اون یکی هم چون اسمش همزمان هست دستورها به صورت همزمان اجرا میشن
غیرممکنه اشتباه نامگذاری بشن پس علتش چیه ؟

1 پسندیده

اگر c نوشته باشید با مفهوم synchronization که در locking بحث میشه اشنا هستید کد synchronous در هر فرمان lock میکنه روی thread و تا کامل نشه lock رها نمیکنه به همین دلیل میگن این کد blocking هست و ترتیب اجرا رو حفظ میکنه
Async چون برای synchronization صبر نمیکنه همزمان فرمان ها اجرا میشن
اسم گذاری بسیار گیج کننده ای داره اینجا منظور کله حلقه هست شاید به جای همزمان برای future ها باید از کلمه مجزا استفاده میکردم

4 پسندیده

ممنون واقعاً جالب بود این همه مدت با سی کار کردم و کارای خیلی عجیب غریبی کردم باهاش تو گذشته اما اولین باره همچین چیزی میشنوم و مطمئن شدم که هیچی نمیدونم خیلی خفن بود.در مورد اسم گذاری منظور منم دقیقاً همینه و خیلی گیج کننده هست .

1 پسندیده