أنا أفهم خيوط من الناحية النظرية ولكن ليس في الممارسة .صافي

StackOverflow https://stackoverflow.com/questions/49870

  •  09-06-2019
  •  | 
  •  

سؤال

لدي الأساسية cs-الرئيسية فهم متعدد خيوط ولكن لم تفعل شيء أبعد من أجهزة ضبط الوقت في التطبيق.لا أحد يعرف من موارد جيدة من شأنها أن تعطي لي جولة في كيفية العمل مع تطبيقات متعددة الخيوط ، شرح الأساسيات و ربما يطرح بعض من أصعب الأشياء ؟

هل كانت مفيدة؟

المحلول

هذه العظمى الحرة الموارد من قبل جوزيف Albahari. خيوط في C#

نصائح أخرى

اثنين من المواد كبيرة:

ما كل ديف يجب أن تعرف عن تطبيقات ذات مؤشرات ترابط متعددة
فهم تأثير المنخفض قفل التقنيات في تطبيقات ذات مؤشرات ترابط متعددة

على الرغم من أن هذه المادة ليست بالضبط ما كنت أبحث عنه تحديدا ، نأمل أن تكون المساعدة عموما (أيذلك هو ذات الصلة ، جيد جدا قراءة):

حرية انتهى الغداء:منعطفا أساسيا نحو التوافق في البرامج

هناك 4 طرق أساسية لمزامنة المواضيع في .صافي:

  • BackgroundWorker التحكم
  • WaitHandles
  • رد وظائف
  • الاقتراع وهو ASyncResult كائن

عموما كنت تريد أن تبدأ في الجزء العلوي من هذه القائمة والعمل باستمرار.وهذا يعني أول نظرة ومعرفة ما إذا كان backgroundworker التحكم يتناسب مع الوضع.ومع ذلك ، فهذا يفترض نماذج windows و أنك فقط التفريخ واحد موضوع جديد.

لذا حاول waithandles.Waithandles جيدة على تنسيق العديد من المواضيع معا.يمكنك ركلة لهم كل شيء وانتظر كل منهم إلى النهاية ، أو إذا كنت تريد أن تبقي عدد معين النشطة كنت أنتظر واحد فقط و التفريخ المقبل عندما تنتهي.أو ربما كنت تعرف موضوع واحد سوف تنتهي في وقت أقرب بكثير, لذلك يمكنك الانتظار حتى الانتهاء, تفعل قليلا من العمل ، ومن ثم الانتظار لبقية إلى النهاية.

Waithandles قد يبدو مبالغا إذا قلت أنت فقط وضع البيض واحدة إضافية الخيط و أنت لا تريد أن كتلة حتى يتم الانتهاء من ذلك.ثم يمكنك استخدام الاستدعاء ، بحيث الوظيفة المعين سوف يطلق في أقرب وقت الموضوع يكمل.

وأخيرا ، إذا و فقط إذا كان لسبب لا شيء مما سبق العمل يمكن أن تقع مرة أخرى إلى الاقتراع.

أستطيع أن أفكر 5 طرق مختلفة للحصول على موضوع جديد في .صافي أيضا ما يقرب من أجل:

  • نظام التشغيل التي تم إنشاؤها عادة نتيجة winforms الحدث (بما في ذلك BackgoundWorker).
  • Obj.Begin___()/نهاية____().بعض CLR الطبقات بالفعل هذه غير متزامن أساليب محددة بالنسبة لك ، و من الواضح أنك ترغب في استخدامها عندما تكون متوفرة.
  • ThreadPool.QueueUserWorkItem().استخدام هذا أكثر من مرة إلى إنشاء المواضيع الخاصة بك.
  • مندوب.BeginInvoke()/EndInvoke().يمكنك لف أي أسلوب هذا الطريق.
  • الخيط.Start().لك يمكن أن تفعل ذلك بهذه الطريقة ، ولكن قرأت شيئا في الآونة الأخيرة (لا يكون الرابط الآن) أنه إذا QueueUserWorkItem لن يعمل مندوب الأسلوب هو الأفضل.

الموقع جيد-الموارد لمعرفة المزيد عن خيوط متعددة في .صافي:

واحدة من أفضل الموارد أعرف في هذا الموضوع "خيوط في C#" كتاب:http://www.albahari.com/threading/

لقد لمحة كبيرة من كل شيء .net developer تحتاج إلى فهم من أجل برنامج متعدد الخيوط التطبيقات.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top