الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

المشكلة 2: التزامن في الخادم

بدأه علاء الصالحي في 15 يوليو 2011 · 13 رد · 3,019 مشاهدة · في قسم المشاريع الجماعية
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

اسم العضو علاء الصالحي

اسم الملف Server في مشروع الخادم

إصدارة الملف التي تم اكتشاف المشكلة فيها 28 (لا يجب أن يتم البحث عن مبدأ الخطأ وإنم يكفي التنويه على الإصدارة الحالية للمشروع)

اسم الحقل loginUsers

تفاصيل المشكلة بالعربية

هذه الحقل يتم استخدامه بواسطة أكثر من خيط في نفس الوقت

بالطبع هذا يعني حصول خراب damage في البيانات المخزنة فيه

الحل المقترح للمشكلة

تحويل الدوال التالية

putEmail

removeEmail

إلى synchronization

بالنسبة للدالة getEmail

فاقترح أن تبقى على حالها لأنها تستخدم بكثرة وتحويلها إلى synchronization يعني إبطاء الخادم بشكل كبير

وعدم تحويلها لن يأثر كثيراً على الخادم

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#2

يعنى المشكله اننا نغيرهم الى

public synchronized void putEmail(Long emailId, Client client) {
    	loginUsers.put(emailId, client);
	}


	public synchronized void removeEmail(Long emailId) {
    	loginUsers.remove(emailId);
	}

كدا خلاص ؟ ولا فيه تعديلات اخرى ؟

1

Software Developer
Mahmoudkelany.com


 

#3

صحيح هذا الحل المبدئي للموضوع

لكني أريد أن أطلعكم على الموضوع

ربما قد ترون غير رأيي

عندها نتناقش ونستزيد لكن لو اعتمدت رأيي مباشرة

لربما كان هناك أخطاء لم ألحظها

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#4

ليه حددت الدوال

putEmail

removeEmail

وتريد تحويلها إلى synchronization

انا لم اريد ان اضع اميل يتم وضعه عن طريقه داله الـ loginMessage الموجوده فى الـ Client class

وان اردت حذف الاميل يتم حذفه عن طريق الداله logoutMessage فى حاله تسجيل الخروج

او عن طريق الداله loginMessage ايضا لكن فى حاله ان الاميل الخاص بالمستخدم تم فتحه على جهاز اخر

ليه بقا عاوز تعملها تزامن ؟؟؟

Software Developer
Mahmoudkelany.com


 

#5

أي خيط من خيوط العملاء سيقوم بإضافة نفسه على HashMap

بالتالي ببساطة ممكن أن يأتي اثنين يريدان الإضافة على الـ HashMap

ما الذي سيحصل عندها؟

الله يعلم

لكن أضمن لك أنك لن تحب النتيجة كمبرمج

لكي نضمن عدم وجود أكثر من خيط يضيف على HashMap أو يحذف منها نحتاج إلى التزامن synchtonization

أو بعبارة أخرى نريد أن نضمن علاقة أنا وفقط أنا في الوقت الحالي أو ما يعرف بـ mutual exclosion

هل اتضحت؟ إن لم تضح بإمكاني أن أوضح أكثر

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#6
علاء الصالحي كتب:

أي خيط من خيوط العملاء سيقوم بإضافة نفسه على HashMap

بالتالي ببساطة ممكن أن يأتي اثنين يريدان الإضافة على الـ HashMap

ما الذي سيحصل عندها؟

الله يعلم

لكن أضمن لك أنك لن تحب النتيجة كمبرمج

لكي نضمن عدم وجود أكثر من خيط يضيف على HashMap أو يحذف منها نحتاج إلى التزامن synchtonization

أو بعبارة أخرى نريد أن نضمن علاقة أنا وفقط أنا في الوقت الحالي أو ما يعرف بـ mutual exclosion

هل اتضحت؟ إن لم تضح بإمكاني أن أوضح أكثر

تحياتي

امممم اعتقد انها مش هيحصل شىء لكنك تريد ان تضمن انه لن يحدث شىء

تمام مفيش مشاكل

لكن خطر على بالى موضوع الان

ان العميل حاول الاتصال بالخادم

وتم الامساك بالداله putEmail ولكن حدث مثلا خطأ معين او تأخر فى الاضافه

هل سيتم ممسك بالداله فتره طويله ويأخر باقى العملاء ؟؟؟؟ لابد من وضع وقت معين للامساك ؟

ولا ايه رايك ؟؟

Software Developer
Mahmoudkelany.com


 

#7

تجربتك كانت على عميلين بالكثير لذا من الصعب أن تحس بشيء

لكن التجربة على عملاء كثر هو ما يزيد حصول مشاكل تعدد الخيوط

فعلاً عملية التزامن تأخذ وقت كبير جداً

وفي حالتنا ستصبح هي عنق الزجاجة في الخادم ككل

لكن هل من بديل هل تريد أن يكون المستخدم مسجل على الموقع ثم لا تجد في القائمة بسبب تعدد الكتاب على نفس الذاكرة

هل لدينا حل أفضل؟

هل تفكر بشيء آخر؟

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#8

طيب تمام

لكن هل فكرت فى مشكله ان تم الحجز بالداله من قبل خيط معين

وحدثت مشكله ؟؟؟ كيف يتم تخليص الداله منه ؟

نريد وضع حد معين لعملية الحجز هذه مثلا اقصى حد 3 او 5 ثوانى

هل هناك قابليه لذلك ؟؟

Software Developer
Mahmoudkelany.com


 

#9

بسبب الجافا لا يحصل شيء كهذا

لكنه يحصل لو قمت بعمل تكرار لا نهائي داخل منطقة التزامن

هذا هو ما عليك أن تقلق بشأنه

بالنسبة لوضع حد معين بالزمن هذا ليس بالإمكان

يمكنك أن تضمن ذلك بضمان الشيفرة داخل منطقة فقط

والشيفرة التي نتكلم عنها خالية من الشوائب clean كما يقال بالإنجليزية

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#10
علاء الصالحي كتب:

بسبب الجافا لا يحصل شيء كهذا

لكنه يحصل لو قمت بعمل تكرار لا نهائي داخل منطقة التزامن

هذا هو ما عليك أن تقلق بشأنه

بالنسبة لوضع حد معين بالزمن هذا ليس بالإمكان

يمكنك أن تضمن ذلك بضمان الشيفرة داخل منطقة فقط

والشيفرة التي نتكلم عنها خالية من الشوائب clean كما يقال بالإنجليزية

تحياتي

كيف يحدث التكرار اللا نهائى داخل منطقة التزامن وكيف يتم اخذ الحظر من ذلك

Software Developer
Mahmoudkelany.com


 

#11

التكرار اللانهائي يحدث بسبب الاستخدام الخاطئ فقط

مثال

synchronize(Object){
while(true)
//do something
}

أو يحدث بسبب deadlock

خيط يعمل على منطقة يتم التزامن فيها باستخدام الكائن أ

وخيط آخر يعمل على منطقة يتم التزامن فيها باستخدام الكائن ب

في الخيط الأول يقوم الخيط بطلب wait على الكائن ب

وفي الخيط الثاني يقوم الخيط بطلب wait على الكائن أ

بدون وجود خيط ثالث يحرر الخيط الأول أو الثاني فإن الخيطين وصلوا طريقاً مسدودة

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#12
علاء الصالحي كتب:

التكرار اللانهائي يحدث بسبب الاستخدام الخاطئ فقط

مثال

synchronize(Object){
while(true)
//do something
}

أو يحدث بسبب deadlock

خيط يعمل على منطقة يتم التزامن فيها باستخدام الكائن أ

وخيط آخر يعمل على منطقة يتم التزامن فيها باستخدام الكائن ب

في الخيط الأول يقوم الخيط بطلب wait على الكائن ب

وفي الخيط الثاني يقوم الخيط بطلب wait على الكائن أ

بدون وجود خيط ثالث يحرر الخيط الأول أو الثاني فإن الخيطين وصلوا طريقاً مسدودة

تحياتي

تمام انا فاهم موضوع الـ deadlock بس كنت بسال عن التكرار اللانهائي بشوف تقصد بيه ايه بس

تمام كدا :)

Software Developer
Mahmoudkelany.com


 

#13

تم رفع الخادم بعد عمليه اضافه التزامن للدالتين putEmail , removeEmail

هل العمل توقف ؟؟؟؟ ام ماذا تعتقد ؟؟

Software Developer
Mahmoudkelany.com


 

#14

بدأت أرى أن الموضوع سيتم على المدى الطويل

أعاني هذه الفترة من انقطاع الإنترنت عني لذا أعتقد أني سأغيب فترة عن المنتدى

بإذن الله أكمل وأعتمد عليك في إكمال المشروع

ما رأيك لو تبدأ بإحدى الأشياء التي تكلمنا عنها في موضوع ماذا نريد أن نطور؟

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

مواضيع مشابهة