• 0

كيف يتعامل الموقع مع عده طلبات في نفس الوقت

تحتاج كل المواقع التي تقوم بادخال و استخراج البيانات من و الى قواعد البيانات الى حفظ تلك المعلومات بعد اخذها عن طريق ال POST او ال GET في متغيرات لتقوم بحفظ تلك البيانات و القيم في قواعد البيانات او عندما تقوم باستخراجها ...

و انا اتسائل عن مالذي يحدث اذا قام اكثر من عضو بالتسجيل في نفس الوقت ِِ.. سيتم ارسال اسم المستخدم و كلمه المرور الى المتغير عن طريق الPOST ليتم حفظها في المتغير الذي يقوم بدوره بادخالها الى الحقل الخاص بها في قاعده البيانات ..

و لكن اذا قام عده مستخدمين بادخال تلك البيانات في نفس الوقت فهل تتعامل اللغه (PHP) مع كل طلب على حده ام يحصل تداخل في البيانات ( قيمه المتغير ) ام ان اللغه ستعامل الطلبات بالترتيب و تعلق الثاني حتى تعالج الاول .. و الا يجعل ذلك الموقع بطئ جدا ؟؟

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
  • 1

سؤال مهم اخي الكريم، وهو من اساسيات عمل انظمة التشغيل قبل ان يكون في التطبيقات.

تعرف انظمة التشغيل بانها 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.

 

بالتوفيق،،،

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن