اذهب إلى المحتوى

السؤال

نشر

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

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

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

Recommended Posts

  • 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.

 

بالتوفيق،،،

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...