نمایش نتایج 1 تا 4 از 4

نام تاپیک: سیستم کال select چیکار میکنه؟

  1. #1

    سیستم کال select چیکار میکنه؟

    سلام،
    دوستان همانطور که در عنوان پست مشخص است در رابطه با system call به نام select اطلاعات میخواستم. کسی میتونه برام توضیح بده که چیکار میکنه و کجاها استفاده میشه؟
    http://man7.org/linux/man-pages/man2/select.2.html

    خواهش میکنم نیاید لینک بدید، اگر تجربه کار باهاش دارید توضیح بدید چون خوندم متوجه نشدم!

  2. #2

    نقل قول: سیستم کال select چیکار میکنه؟

    نقل قول نوشته شده توسط maarek مشاهده تاپیک
    سلام،
    دوستان همانطور که در عنوان پست مشخص است در رابطه با system call به نام select اطلاعات میخواستم. کسی میتونه برام توضیح بده که چیکار میکنه و کجاها استفاده میشه؟
    http://man7.org/linux/man-pages/man2/select.2.html

    خواهش میکنم نیاید لینک بدید، اگر تجربه کار باهاش دارید توضیح بدید چون خوندم متوجه نشدم!
    تصور کنید که یک سوکت آماده برای ارسال اطلاعات دارید جهت تشخیص این موضوع که سوکت مورد نظر آمادگی ارسال اطلاعات را دارد می توانید از select استفاده کنید.یعنی هم میتوانید تا زمان اعلام آمادگی سوکت فرآیند مورد نظر را بلاک کنید وهم می توانید از یک تایم مشخص برای این کار استفاده کنید.
    تقریبا اگر از استانداردهای posix استفاده میکنید قطعا باید از چنین دستورات کنترلی I/O هم استفاده کنید
    البته می توانید تمامی عملیاتهای I/O در سیستم عامل لینوکس را کنترل کنید.
    یک مثال ساده...

    struct timeval tWait;


    tWait.tv_sec= nTimeOut / 1000;
    tWait.tv_usec= (nTimeOut - tWait.tv_sec * 1000) * 1000;


    fd_set writefds;
    FD_ZERO(&writefds);
    FD_SET(m_Sock,&writefds);
    select(m_Sock+1,NULL,&writefds,NULL,&tWait);
    if(! FD_ISSET(m_Sock,&writefds)){
    return(-1);
    }


    if(sendto(m_Sock,...){
    //...
    }

  3. #3

    نقل قول: سیستم کال select چیکار میکنه؟

    نقل قول نوشته شده توسط maarek مشاهده تاپیک
    سلام،
    دوستان همانطور که در عنوان پست مشخص است در رابطه با system call به نام select اطلاعات میخواستم. کسی میتونه برام توضیح بده که چیکار میکنه و کجاها استفاده میشه؟
    http://man7.org/linux/man-pages/man2/select.2.html

    خواهش میکنم نیاید لینک بدید، اگر تجربه کار باهاش دارید توضیح بدید چون خوندم متوجه نشدم!
    برای هر عملیات I/O قابله استفاده هستش. مثل برنامه نويسي شبکه.
    در عمليات I/O ، هميشه شرايط برا خوندن از فايل يا مثلا نوشتن در شبکه مناسب نيست و در صورت اجراي system call خوندن و يا نوشتن برنامه ما بلاک ميشه
    تا فراهم شدن شرايط .
    کاربرد به اين صورت هست کهselect برا شما بررسي ميکنه که آيا امکان انجام عمليات I/O بدون بلاک شدن هستش يا نه .

  4. #4
    کاربر دائمی آواتار sedamorde
    تاریخ عضویت
    مرداد 1387
    محل زندگی
    ایران
    پست
    240

    نقل قول: سیستم کال select چیکار میکنه؟

    سلام، در ادامه صحبت دوستان نکات پایه‌ای را اضافه می‌کنم.

    مبنای سیستم عامل‌های یونیکس و شبه یونیکس «لینوکس» فایل است. مثلاً هر سوکت که در شبکه ایجاد می‌شود برای آن یک فایل توسط سیستم عامل ایجاد می‌شود. در برنامه نویسی، کنترل این فایل توسط Linux file descriptor انجام می‌‌شود که فقط یک عدد است که به فایل اشاره دارد.
    به صورت استاندارد در لینوکس فایل 0 فایل اصلی برنامه است، فایل 1 ورودی برنامه و فایل 2 خروجی برنامه است. هر فایل دیگری که ایجاد شود از 3 تا n خواهد بود.

    حالا تصور کنید که شما یک سرور دارید که قراره هزاران سوکت را مدیریت کنه، یعنی هزاران فایل. یا مثلاً می‌خواهید یک فولدر را مونیتور کنید و هرزمان که فایلی در آن تغییر کرد متوجه شوید، باز هم کلی فایل.
    زمانی که تعداد این فایل‌ها زیاد باشه کنترل آن‌ها سخت میشه. اینجاست که دستوراتی مثل select, poll و epoll به کار می‌آیند.

    این دستورات مانند یک آرایه هستند که file descriptorها در آن‌ها ذخیره می‌شوند تا هر زمان که تغییری در یکی از فایل‌ها ایجاد شد به صورت Notification یک رویداد جدید را به برنامه اطلاع دهند. در حقیقت select یک صف از فایل‌های آماده به کار است که در زمان خواندن یا نوشتن یا بسته شدن فایل ما را آگاه می‌کند. سپس ما می‌توانیم کاری که می‌خواهیم را انجام دهیم و دوباره منتظر Event بعدی باشیم، یا فایل را از صف خارج کنیم...

    وب سرورهایی مثل Nginx یا NodeJS - کتابخانه Libuv با زبان سی برای NodeJS‌ نوشته شده - از این روش استفاده می‌کنند تا بتوانند سوکت‌ها را به صورت Keep-Alive‌ برای طولانی مدت نگهدارند. در این وضعیت با کم‌ترین سربار اضافی میلیون‌ها فایل را می‌شود مدیریت کرد.

    اضافه کنم که select محدودیت دارد، اگر اشتباه نکنم بیشتر از 1000 فایل ذخیره نمی‌کند. به علاوه چون از آرایه استفاده می‌کند هربار باید کل صف را بررسی کند. اما epoll فوق‌العاده سریع است، من به صورت آزمایشی در آن تا 500.000 فایل به سادگی ذخیره کردم، و البته برای این کار نیاز به تغییراتی در تنظیم محدودیت‌ها در سیستم عامل دارید. ولی epoll فقط در لینوکس کار می‌کند و به جای آن از poll می‌توانید در سیستم عامل‌های دیگر اضافه کنید. اما select که اول برای FreeBSD نوشته شد همه‌جا کار می‌کند.

    منتها فراموش نکنید که کنترل نوشتن برنامه‌های event-driven کار آسانی نیست. سختی‌ها تازه بعد از select شروع می‌شود ;)

    موفق باشید.

تاپیک های مشابه

  1. پاسخ: 0
    آخرین پست: پنج شنبه 13 تیر 1392, 12:45 عصر
  2. پاسخ: 1
    آخرین پست: جمعه 07 تیر 1392, 23:07 عصر
  3. پاسخ: 14
    آخرین پست: پنج شنبه 29 مرداد 1388, 19:58 عصر
  4. پاسخ: 5
    آخرین پست: شنبه 19 مرداد 1387, 22:30 عصر
  5. استفاده از خروجی یه Select تو Select دیگر
    نوشته شده توسط federrer در بخش SQL Server
    پاسخ: 6
    آخرین پست: دوشنبه 29 مرداد 1386, 21:50 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •