عمليات جزئية و مؤشر الترابط التشعبي
استخدام أنظمة تشغيل معالجات إلى فصل التطبيقات المختلفة التي كانت تقوم بتنفيذها. مؤشرات الترابط هي الوحدة أساسى إلى الذي يخصص النظام التشغيل لوقت المعالج، ومؤشر ترابط واحد أو أكثر من يمكن أن يكون بتنفيذ تعليمات برمجية داخل تلك العملية. يحتفظ كل مؤشر ترابط معالجات استثناء بأفضلية جدولة ومجموعة من بنيات النظام يستخدم لتوفير سياق مسار التنفيذ حتى تتم جدولتها. سياق مؤشر ترابط يتضمن الجميع المعلومات التي يحتاج مؤشر ترابط بشكل متميز استئناف التنفيذ، بما في ذلك لمؤشر ترابط التعيين سجلات CPU وبنية تخزين العناصر، على مسافة عنوان المضيف لمؤشر ترابط عملية.
subdivides.NET Framework بشكل أكبر النظام تشغيل المعالجة في subprocesses المدارة خفيفة، تسمى مجالات تطبيق، يمثله System.AppDomain. عمليات جزئية التي تمت إدارتها أو أكثر (تمثيل بواسطة System.Threading.Thread) يمكن تشغيلها في عدد واحد أو أي من مجالات تطبيق داخل مدارة نفس عملية. على الرغم من أن كل مجال التطبيق هو بدأ بمؤشر ترابط مفرد، التعليمة البرمجية في هذا المجال التطبيق يمكن إنشاء مجالات التطبيقات الإضافية ومؤشرات الترابط إضافية. النتيجة هو يمكنك تحريك مؤشر ترابط مدارة بحرية بين مجالات تطبيق داخل نفس العملية التي تمت إدارتها؛ وقد يكون لديك مؤشر واحد فقط للتنقل بين عدة مجالات تطبيقات.
النظام تشغيل متعدد المهام يدعم ذلك preemptive إنشاء تأثير التنفيذ المتزامن لمؤشرات ترابط متعددة من عمليات متعددة. يقوم بذلك بواسطة قسمة هو زمن المعالج متوفرة بين عمليات جزئية التي تحتاج إليها، وتخصيص شريحة وقت معالج إلى كل مؤشر ترابط واحد تلو الآخر. مؤشر الترابط قيد التنفيذ حاليا هو مرحلياً عند به الوقت المنقضي شريحة، وآخر مؤشر ترابط سير ذاتية التشغيل. عند تبديل النظام من مؤشر ترابط واحد إلى آخر، يقوم بحفظ مؤشر ترابط سياق مؤشر الترابط preempted و إعادة سياق مؤشر الترابط المحفوظة مؤشر الترابط التالي في قائمة انتظار مؤشر الترابط.
الطول وقت الشريحة التي تستند إلى النظام التشغيل و المعالج. لأن كل شريحة الوقت هو الصغيرة، مؤشرات ترابط متعددة يبدو أن يتم تنفيذها في الوقت نفسه، حتى إذا كان هناك هو معالج واحد فقط. هذه هي الحالة فعلياً تشغيل الأنظمة ذات المعالجات المتعددة، الموقع يتم توزيع عمليات جزئية التنفيذية بين المعالجات متوفر.
عند إلى استخدام مؤشرات ترابط متعددة
Software that requires user interaction must react إلى the user's activities كـ rapidly كـ possible إلى provide a rich user experience. في نفس الوقت، ومع ذلك، فإنه عليك القيام العمليات الحسابية الضرورية لتقديم بيانات إلى مستخدم سريع قدر الإمكان. إذا كان تطبيق الخاص بك باستخدام مؤشر واحد فقط للتنفيذ، يمكنك يجمع برمجة غير متزامن ب العمل عن بعد.NET Framework أو الخدمات ويب من XML بإنشائها باستخدام ASP.NET لاستخدام وقت المعالجة لأجهزة الكمبيوتر الأخرى بالإضافة إلى ذلك إلى من عندك إلى استجابة زيادة للمستخدم و تقليل وقت معالجة بيانات تطبيق الخاص بك. إذا كنت تقوم بعمل إدخال/إخراج كبيرة، يمكنك أيضا استخدام منافذ إكمال الادخال/الاخراج إلى زيادة استجابة تطبيق الخاص بك.
فوائد متعددة عمليات جزئية
على الرغم من ذلك، قم باستخدام مؤشر ترابط واحد أو المزيد، هو الأسلوب الأكثر فعالية لزيادة استجابة للمستخدم ومعالجة بيانات اللازمة للحصول على عملك في نفس الوقت تقريبا. تشغيل a الكمبيوتر مع واحد processor, multiple عمليات جزئية can إنشاء this effect, taking advantage of the مربع متوسط periods of الوقت في between مستخدم أحداث إلى عملية the بيانات في the الخلفية. For مثال, a مستخدم can تحرير a spreadsheet while another مؤشر ترابط هو recalculating غير ذلك parts of the spreadsheet within the same تطبيق.
Without modification, the same تطبيق would dramatically زيادة مستخدم satisfaction when run تشغيل a الكمبيوتر مع المزيد واحد processor. Your مفرد مجال تطبيق could استخدم multiple عمليات جزئية إلى accomplish the following tasks:
Communicate over a شبكة, إلى a ويب الخادم, و إلى a قاعدة بيانات.
Perform العمليات that take a قطر أيمن متوسط المقدار of الوقت.
Distinguish tasks of varying أولوية. For مثال, a عالي-أولوية مؤشر ترابط manages الوقت-حرج tasks, و a منخفض-أولوية مؤشر ترابط performs غير ذلك tasks.
Allow the مستخدم واجهة إلى remain responsive, while allocating الوقت إلى الخلفية tasks.
Disadvantages of Multiple عمليات جزئية
It هو recommended that you استخدم كـ few عمليات جزئية كـ possible, thereby minimizing the استخدم of operating-النظام موارد و improving الأداء. Threading also has مورد requirements و potential conflicts إلى be considered when designing your تطبيق. The مورد requirements are كـ follows:
The النظام consumes ذاكرة for the سياق معلومات مطلوب بواسطة معالجات, AppDomain الكائنات, و عمليات جزئية. Therefore, the رقم of معالجات, AppDomain الكائنات, و عمليات جزئية that can be تاريخ الإنشاء هو limited بواسطة متوفر ذاكرة.
Keeping مقطع صوتي of a قطر أيمن متوسط رقم of عمليات جزئية consumes significant processor الوقت. If there are too many عمليات جزئية, most of them will not make significant التقدم. If most of the الحالي عمليات جزئية are في واحد عملية, عمليات جزئية في غير ذلك معالجات are scheduled أقل frequently.
Controlling تعليمات برمجية execution مع many عمليات جزئية هو complex, و can be a المصدر of many bugs.
Destroying عمليات جزئية يتطلب knowing what could happen و handling those issues.
Providing shared الوصول إلى موارد can إنشاء conflicts. إلى avoid conflicts, you must يزامن, أو عنصر تحكم the الوصول إلى, shared موارد. Failure إلى synchronize access properly (in the same أو different تطبيق domains) can lead إلى problems such كـ deadlocks (in which two threads إيقاف responding while each waits for the غير ذلك إلى complete) و race conditions (when an anomalous result occurs due إلى an unexpected حرج dependence on the timing of two events). يوفر النظام الكائنات المزامنة التي يمكن استخدامها إلى تنسيق مورد مشاركة بين مؤشرات ترابط متعددة. تقليل عدد عمليات جزئية يسهل إلى مزامنة موارد.
تضمين موارد التي تتطلب المزامنة:
موارد النظام (مثل كـ منافذ اتصال).
موارد مشتركة بين عدة عمليات (مثل كـ الملفات المقابض).
The موارد of a single تطبيق domain (such كـ عمومي, static, و مثيل fields) accessed by multiple threads.
Threading و تطبيق Design
In عام, using the ThreadPool فئة هو the easiest way إلى hوle multiple threads for relatively short tasks that will not block غير ذلك threads و when you do not expect any particular scheduling of the tasks. ومع ذلك، فهناك عدد من الأسباب إلى إنشاء عمليات جزئية الخاصة بك:
إذا كنت بحاجة مهمة إلى لها أولوية معين.
If you have a مهمة that might run a long time (و therefore block غير ذلك tasks).
إذا كنت بحاجة إلى عمليات جزئية في وضع إلى شقة مؤشر ترابط مفرد (الجميع عمليات جزئية ThreadPool موجودان في شقة ذات مؤشرات ترابط متعددة).
إذا كنت بحاجة هوية مستقرة المقترن مع مؤشر ترابط. على سبيل المثال، يجب عليك استخدام مؤشر ترابط خاص إلى إحباط مؤشر الترابط هذا التوقف المرحلي عليه أو اكتشاف حسب الاسم.
إذا كنت بحاجة إلى تشغيل عمليات جزئية الخلفية التي تتفاعل مع واجهة مستخدم، يوفر الإصدار 2.0 من برنامج.NET Framework BackgroundWorkerمكوّن الذي يتصل باستخدام الأحداث، بتنظيم مجموعات من مؤشر ترابط إلى مؤشر ترابط واجهة مستخدم.
ترابط و استثناءات
قم بمعالجة استثناءات في عمليات جزئية. لم تتم معالجته استثناءات في عمليات جزئية، حتى الخلفية عمليات جزئية، وإنهاء العملية بشكل عام. هناك ثلاثة استثناءات إلى هذه قاعدة:
ThreadAbortExceptionهو تم طرح في مؤشر ترابط لأن Abortتم استدعاء.
AppDomainUnloadedExceptionهو طرح في مؤشر ترابط نظراً لمجال تطبيق هو إلغاء تحميل.
اللغة الشائعة وقت التشغيل أو إنهاء عملية مضيف مؤشر ترابط.
لمزيد من المعلومات، راجع الاستثناءات في مدارة عمليات جزئية.
ملاحظة |
---|
في إصدارات.NET Framework 1.0 و 1.1، يعوض وقت تشغيل اللغة العامة صمت بعض الاستثناءات، على سبيل المثال في مؤشرات ترابط تجمع مؤشر ترابط.This may corrupt تطبيق state و eventually cause applications إلى يعلق, which might be very difficult إلى يصحح. |