عکس پیش‌فرض نوشته

یکی از مهمترین ویژگی های نخ آن است که میتواند بدون مسدود کردن کل فرآیندی که نخ در آن در حال اجراست، راهکار مناسبی جهت فراخوانی های سیستمی مسدود شونده مهیا کند.

این ویژگی باعث جذابیت ویژه به کارگیری نخ در سیستم های توزیعی میشود؛ به این دلیل که به این واسطه، بیان ارتباط به صورتی همزمان با حفظ اتصالات منطقی متعدد، بسیار آسان تر خواهد شد.

در این مطلب سعی خواهیم کرد تا با بررسی دقیق تر مشتری و خدمتگزار چند نخی این موضوع را تشریح کنیم.
نخ در سیستم های توزیع شده

 

مشتری چند نخی

بهتر است برای دستیابی به شفافیت توزیعی بیشتر، سیستم های توزیعی که در شبکه های گسترده عمل میکنند، زمان های انتشار پیام های میان فرآیندی طولانی را مخفی کنند.

تأخیر سفر رفت و برگشت (Scheduler Activation) در یک شبکه گسترده ممکن است به صدها میلی ثانیه (و گاهی چند ثانیه) برسد.

 

روش معمول در مخفی سازی تاخیرهای ارتباطی، آغاز ارتباط و ادامه بی درنگ کار دیگر است. یکی از کاربردهای این حالت در جستجوگرهای وب است.

در اکثر موارد، سند وب متشکل از یک فایل HTML است که شامل یک متن عادی به همراه مجموعه از تصاویر، جداول و … است.

برای واکشی (fetch) هر یک از مولفه های سند وب، جستجوگر باید با ایجاد یک اتصال TCP/IP داده های ورودی را بخواند و آنرا به مولفه صفحه نمایش منتقل کند. ایجاد اتصال و خواندن داده های ورودی اساساً از نوع عملیات مسدود شونده هستند.

در هنگام بحث در مورد ارتباط در مسافت طولانی هم با این اشکال مواجه هستیم که امکان دارد زمان تکمیل هر یک از عمل ها نسبتاً طولانی باشد.

 

جستجوگرهای وب غالباً کار را با واکشی صفحه HTML آغاز کرده و سپس آنرا نمایش میدهند.

جهت مخفی سازی حداکثری تاخیرهای ارتباطی، برخی جستجوگرها کار نمایش داده را همزمان با ورود آنها آغاز میکنند.

وقتی متن صفحه به همراه امکانات مرور کردن (و نیز سایر امکانات) در اختیار کاربر قرار گرفت، جستجوگر کار را با واکشی دیگر فایل های سازنده صفحه از قبیل تصاویر و جداول ادامه خواهد داد.

تصاویر همزمان با ورودشان نمایش داده میشوند؛ بنابراین دیگر لازم نیست کاربر منتظر بماند تا تمامی مولفه های کل صفحه واکشی شده و سپس صفحه در اختیار کاربر قرار گیرد.

 

در عمل شاهد بوده ایم که جستجوگرهای وب، چندین کار را به صورت همزمان انجام میدهند. بنابراین، ایجاد جستجوگر به عنوان یک برنامه مشتری چند نخی شده تا حدود زیادی باعث تسهیل در کارها خواهد شد.

به محض واکشی فایل HTML اصلی، میتوان جهت واکشی سایر بخش ها، نخ های دیگری را هم فعال نمود. هر یک از نخ ها اتصال جداگانه ای را با خدمتگزار برقرار کرده و داده ها را به داخل می آورد.

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

تمامی نخ ها کد واحد و ساده ای دارند. (سادگی مهم تر است!) در همین حال، کاربر فقط متوجه تاخیر در نمایش تصاویر و نظایر آنها شده ولی همچنان میتواند اقدام به جستجو در کل سند نماید.

 

مزیت مهم دیگر در استفاده در جستجوگرهای چند نخی وب آن است که میتوان چندین اتصال را به صورت همزمان باز نمود.

در مثال فوق، چندین اتصال به یک خدمتگزار واحد انجام شده بود؛ اما چنانچه این خدمتگزار دارای بار زیادی بوده و یا بسیار کند باشد، رهیافت چند نخی هیچ بهبود واقعی در کارآیی نسبت به دستیابی ترتیبی به فایل ها نخواهد داشت.

 

با این وجود، در بسیاری از موارد، خدمتگزارهای وب در بین چندین ماشین تکثیر شده و هر خدمتگزار مجموعه کاملاً واحدی از اسناد وب را ارائه میکند. خدمتگزارهای تکثیر شده، در سایت واحدی قرار داده شده و نام آنها نیز یکسان خواهد بود.

وقتی درخواستی در رابطه با یک صفحه وب وارد میشود، این درخواست در اکثر موارد بر اساس راهکار نوبت گردشی (Round-Robin) یا هر روش دیگر معادل کننده بار، به یکی از خدمتگزارها فرستاده میشود.

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

البته استفاده از این رهیافت فقط در صورتی امکان پذیر خواهد بود که مشتری بتواند با جریانات واقعاً موازی داده های ورودی کار کند؛ که برای این منظور، نخ ها بهترین و مناسب ترین گزینه محسوب میشوند.

 

 

خدمتگزار چند نخی (سرور چند نخی)

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

در عمل مشاهده شده که چند نخی شدن علاوه بر ساده سازی چشمگیر کُد سرور، باعث سهولت فراوان ایجاد خدمتگزارهایی میشود که از ویژگی موازی سازی برای افزایش کارآیی خود، حتی در سیستم های تک پردازنده، استفاده میکنند.

با این وجود، امروزه که کامپیوترهای چند پردازنده در نقش ایستگاه های کاری چند منظوره کاربرد گسترده ای پیدا کرده اند، چند نخی شدن به منظور موازی سازی، بیش از پیش کاربرد پیدا کرده است.

 

برای درک مزایای استفاده از نخ (Thread) در نوشتن کد خدمتگزار، سازمان خدمتگزار فایلی را در نظر بگیرید که بر حسب مورد باید در انتظار دسترسی به دیسک مسدود شود.

خدمتگزار فایل معمولاً منتظر ورودی درخواست برای عملیات فایل می ماند و پس از دریافت یک درخواست، آنرا اجرا کرده و در پایان پاسخ را برمیگرداند.

یک نمونه از سازماندهی بسیار متداول در تصویر زیر نشان داده شده است.

در اینجا یک نخ به نام Dispatcher (پخش کننده) اقدام به خواندن درخواست های ورودی برای عملیات فایل میکند. مشتریان درخواست های خود را به نقطه تماس خدمتگزار مذکور ارسال میکنند. پس از بررسی درخواست، خدمتگزار یک نخ کارگر (Worker Thread) بیکار را انتخاب کرده و این درخواست را به آن تحویل میدهد.

خدمتگزار جند نخی با سیستم پخش کننده

 

کارگر کار خود را با انجام عمل خواندن مسدود شونده روی سیستم فایل محلی ادامه میدهد، که این کار ممکن است باعث تعلیق این نخ تا زمان واکشی داده ها از دیسک شود. در صورت معلق بودن نخ، نخ دیگری برای اجرا انتخاب خواهد شد.

به عنوان مثال، ممکن است پخش کننده برای انجام کار بیشتر انتخاب شود؛ البته ممکن است نخ کارگر دیگری که هم اکنون آماده اجراست، انتخاب شود.

 

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

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

خدمتگزار در این حین (انتظار برای دیسک)، بیکار بوده و هیج درخواست دیگری را پردازش نمیکند.

در نتیجه، در هنگام کار، نمیتوان روی درخواست های مشتریان دیگر کار کرد؛ به علاوه، چنانچه خدمتگزار فایل، روی یک ماشین اختصاصی در حال اجرا باشد (معمولاً همین اتفاق می افتد) در فاصله زمانی که منتظر دیسک است، پردازنده کاملا بیکار خواهد بود. در نتیجه، تعداد درخواست های پردازش شده در ثانیه افت خواهد کرد.

همانطور که میبینید، نخ ها کارآیی بالایی دارند، ولی هر نخ به صورت ترتیبی و به طور معمول برنامه ریزی میشود.

 

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

اما حالتی را فرض کنید که چند نخی موجود نبوده، اما برای طراحان سیستم، حالت تک نخی به دلیل افت کارآیی قابل قبول نباشد.

در این مسئله روش سومی که میتواند به کار گرفته شود، راه اندازی خدمتگزار به صورت یک ماشین حالت حدود (Finite-State Machine) بزرگ است.

 

با ورود درخواست جدید، تنها نخ موجود در سیستم آنرا بررسی خواهد کرد. در صورتی که بتواند از طریق حافظه پنهان دیسک به این درخواست رسیدگی کند که هیچ، وگرنه پیامی برای دیسک ارسال میکند.

اما به جای مسدود شدن، وضعیت درخواست فعلی را در جدولی ثبت کرده و به سراغ پیام بعدی میرود. پیام بعدی ممکن است درخواست برای یک کار جدید باشد، یا پاسخی از جانب دیسک در مورد عملیات قبلی.

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

در این طرح، خدمتگزار مجبور خواهد بود از فراخوانی های غیر مسدود شونده Send و Receive استفاده کند.

 

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

در واقع در اینجا نخ و پشته های آن با دشواری خاص خود شبیه سازی شده اند.

این فرآیند به صورت یک ماشین حالت-محدود عمل میکند؛ یعنی یک رویداد را گرفته و بسته به محویاتش در برابر آن واکنش نشان میدهد.

 

نخ ها این امکان را به ما میدهند تا ایده فرآیندهای ترتیبی که به وسیله فراخوانی های سیستمی مسدود شونده انجام میشوند (مثلا یک RPC برای ارتباط با دیسک)، حفظ شده و همچنان موازی سازی به دست آید.

فراخوانی های سیستمی مسدود شونده، برنامه نویسی را تسهیل کرده و موازی سازی هم باعث ارتقاء کارآیی خواهد شد.

در سرور تک نخی سهولت و سادگی فراخوانی های سیستم مسدود شونده، حفظ شده ولی کارآیی کاهش پیدا میکند.

در رهیافت ماشین حالت-محدود، موازی سازی باعث ارتقاء کارآیی شده ولی استفاده از فراخوانی های غیر مسدود شونده، برنامه نویسی را دشوار میکند.

میتوانید خلاصه مدل های گفته شده را در جدول زیر ببینید. (روش های ساخت خدمتگزار / سرور)

 

مدل خدمتگزارویژگی های خدمتگزار
چند نخیموازی سازی، فراخوانی های سیستم مسدود شونده
فرآیند تک نخیعدم موازی سازی، فراخوانی های سیستم مسدود شوند
ماشین حالت-محدودموازی سازی، فراخوانی های سیستمی غیر مسدود شونده

 

این آموزش بیش از ۳ سال قبل ارسال شده و اکنون در لیست به‌روزرسانی‌های سایت قرار دارد. اگر پیشنهاد یا انتقادی برای بهبود آموزش دارید، خوشحال می‌شیم به ما اطلاع بدهید.