I/O شامل چه چیز هایی میشه؟

سلام.
داشتم ی talk در مورد برنامه نویسی async میدیدم که این جمله ذهنمو به خودش مشغول کرد:

io کند هست. کارایی مثل ذخیره توی دیتابیس، نوشتن یک فایل، دانلود یک فایل از اینترنت، ارسال اطلاعات از طریق socket و…

چرا باید این موارد جزء io محسوب بشه؟

(پی نوشت: کسی در مورد file descriptor اطلاع داره؟

هر چیزی که با دنیای خارج در تماس باشه io حساب می شه. ( به جزء دسترسی مموری). چراش هم اینه که cpu برای این کار ها نیاز داره که یه سری instruction های خاص رو صدا بزنه و دیتا رو از یه دیوایس بخونه و یه جایی روی مموری و یا کش لود کنه و باهاش کار کنه.

سوال رو بفرما اگر بدونیم در خدمتیم

1 Likes

ی وب سرور دارم روی ترد اول و ی بار خواستم web request رو از ترد اول به ترد دوم پاس بدم و توی ترد دوم response بدم.

ولی ارور
file descriptor is not registered
داد و توی انجمن اون زبان برنامه نویسی پرسیدم فقط بهم گفتن توی async با thread کار نکن

آخر سر ی channel بین اون ترد دوم و ترد وب سرور راه انداختم

ی چیزی شبیه این:

channel و اینا خیلی high level هستند و جای یحث خودشون رو دارن. اما اینجوری به داستان نگاه نکن که ترد ۱ و ترد ۲ دو تا چیز متفاوت هستند که لازم باشه بینشون چیزی پاس بدی. دیدت به ترد ها مثل پروسس هاست که خوب درست نیست. تو کار با ترد ها از اونجایی که یه سری سگمنت ها بین ترد ها مشترک هست باید با دسترسی به مموری بینشون دیتا به اشتراک بذاری که خود این موضوع خودش بحث مربوط به خودش رو پیش می آره و بخاطر پیچیدگیش abstraction های زیادی ساخته شده ( مثل همین channel ها ) که ساده تر کنه کار کردن با ترد ها رو.

در مورد اروری که دادی باید کد رو ببینم تا بتونم کمک کنم اما تقریبا همیشه بهتره از یه abstraction ها و ابزار های پیش ساخته استفاده کنی تا بخوای در پایین ترین سطح مدیریت ترد ها رو انجام بدی. و بهتر زبانی رو انتخاب کنی که طراحی بهتری داره برای اینکار.

1 Likes

اینجا ترد رو راه میندازم:

این هم تابعی هست که با ترد راه میفته:

چند تا نکته توی کد:

  1. توی زبون nim اگر تابعت فقط ی ورودی داشته باشه لازم نیست پرانتز بزاری

  2. اون علامت [ ] بعد از متغیر pointer اون رو derefrence میکنه

ارور توی تابعی که با ترد راه انداخته میشه رخ میده

wsclient[].send data

متاسفانه با nim آشنایی ندارم که بتونم کمک کنم

1 Likes

در مورد طراحی و نحوه کارکرد async مقاله خوبی سراغ دارید?

پا توی دنیای خیلی بزرگی داری میزاری :joy:

مقاله و اینا که زیاده خیلی اما پیشنهاد می کنم از کف شروع کنی و مفاهیم پایه رو خوب یاد بگیری بعد بری سراغ مفاهیم high level تر. برای همین خیلی پیشنهاد می کنم در مورد ترد ها و تفاوت ها شون با پروسس ها و پیاده سازی هاشون بخونی. در مورد لاک ها و …

2 Likes

خود سازنده اصلیش در مورد shared data ها و ارتباط بین ترد ها یکی دوتا مقاله داره که در مورد lock و … یکم حرف زده ولی خودش میگه استفاده از channel ها کار هوشمندانه تریه.

همون جور که عرض کردم استفاده از abstraction های high level تر مثل CSP و … ۱۰۰٪ بهتره. ولی اگر می خوای در این زمینه بیشتر بدونی باید اول مفاهیم پایه ای رو بررسی کنی. ولی اگر می خوای فقط در حد استفاده بدونه که خوب همون CSP و اینا کفایت می کنه. CSP توی خیلی از زبان ها پیاده سازی شده که می تونی به اونا هم نگاه بندازی

1 Likes

این ویدیو توضیح خوبی درمورد async IO و scheduler و fiber ها داره

3 Likes

خودم هنوز نرفتم سراغش ولی احتمالا این کتاب خوب باشه:

2 Likes