سؤال مهم اخي الكريم، وهو من اساسيات عمل انظمة التشغيل قبل ان يكون في التطبيقات.
تعرف انظمة التشغيل بانها Multi-threaded او Multi-tasking اي تقوم بأكثر من مهمة بنفس الوقت، لذلك بإمكانك تشغيل اكثر من برنامج او تطبيق بنفس اللحظة على نظام التشغيل، هذا لم يكن متاح سابقا.
في التطبيقات (منها الويب) يوجد نفس المفهوم ولكن الأمر يعتمد على المطور الذي سيقوم بعمل تطبيقه Multi-threaded أو يمكن ان يتعامل مع اكثر من طلب بنفس الوقت. بحيث يكون هناك Thread (يمكنك تشبيها بنادل في مطعم) يقوم باستقبال الطلبات فقط، ويحولها ل Thread اخرى لتقوم بمعالجتها ويذهب النادل لاستقبال طلبات اخرى، وفي حال تم تجهيز طلب معين يقوم النادل بتوصيلة بالشكل المناسب.
ليس لدي خبرة في PHP، لكن ضمن بيئة ASP.NET يوجد هذا المفهوم بشكل مفصل ويوجد اليات حديثة لاستخدامه، وقد تم اجراء اختبار استطاع السيرفر استقبال 20,000 طلب في الثانية الواحدة.
مثال صغير من ASP.NET MVC، لنفرض ان الدالة المسؤولة عن معالجة طلب صفحة اخر الاخبار بالشكل التالي:
public ActionResult Posts()
{
var model= database.GetRecentPosts();
return View(model);
}
هذا يسمى بالوضع العادي او Single-thread، يعنى عملية طلب الاخبار من قاعدة البيانات ربما يتطلب زمن معين (كمثال العمليات الحسابية الطويلة نوعا ما) هنا ستضظر ال Thread المسوؤلة عن الطلب (النادل) الانتظار حتى يتم جلب الاخبار من قاعدة البيانات، ثم تقوم بعرض الصفحة للمستخدم
return View(model);
لكن يمكن تطوير هذا النموذج الى الشكل التالي:
public async Task<ActionResult> Posts()
{
var model= await database.GetRecentPosts();
return View(model);
}
بهذه الطريقة السهلة والمعبرة ضمن #C يمكن ل Thread الان الانتقال لمعالجة طلبات اخرى بينما يتم جلب البيانات او اجراء العمليات الحسابية (لاحظ كلمة await بجانب عملية طلب البيانات)، وعند الانتهاء من هذه العملية ترجع thread لتوصيل النتيجة للمستخدم.
طبعا ليس شرط نفس thread هي التي تعمل كل هذا، هناك ما يسمى ب Thread pool، (يشبه مجموعة من العمال بانتظار عمل معين) يقوم نظام التشغيل تلقائيا بتنظيم الية عملهم لذلك يطلق على نظام التشغيل اسم Scheduler، كما يقوم باسناد المهام المختلفة لهم وتحويلهم من حالة لاخرى لذلك يطلق عليه ايضا اسم Dispatcher.
بالتوفيق،،،