غير متزامن مقابل تعدد مؤشرات الترابط - هل هناك فرق؟

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

سؤال

هل تؤدي المكالمة غير المتزامنة دائمًا إلى إنشاء موضوع جديد؟ما الفرق بين الاثنين؟

هل تقوم المكالمة غير المتزامنة دائمًا بإنشاء أو استخدام موضوع جديد؟

تقول ويكيبيديا:

في برمجة الكمبيوتر، الأحداث غير المتزامنة هي تلك التي تحدث بشكل مستقل عن تدفق البرنامج الرئيسي.الإجراءات غير المتزامنة هي إجراءات يتم تنفيذها في نظام غير محظور، مما يسمح لتدفق البرنامج الرئيسي بمواصلة المعالجة.

أعلم أنه يمكن إجراء المكالمات غير المتزامنة على سلاسل رسائل واحدة؟كيف يكون هذا ممكنا؟

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

المحلول

ووالرتق هذا السؤال بالقرب عامة جدا الإجابة.

في الحالة العامة، استدعاء غير متزامن لا يعني بالضرورة خلق ترابط جديد. هذا هو أحد السبل لتنفيذه، مع بركة موضوع موجود مسبقا أو عملية خارجية يجري بطرق أخرى. ذلك يعتمد بشكل كبير على اللغة، طراز كائن (إن وجدت)، وبيئة وقت التشغيل.

وغير المتزامن يعني فقط أن موضوع الدعوة لا الجلوس والانتظار للرد، كما لا النشاط غير متزامن يحدث في موضوع الدعوة.

وأبعد من ذلك، وأنت تسير في حاجة للحصول على مزيد من التفاصيل.

نصائح أخرى

وكلما العملية التي يجب أن يحدث بشكل غير متزامن لا تتطلب وحدة المعالجة المركزية للقيام بالعمل، يمكن القيام بهذه العملية دون وضع البيض موضوع آخر. على سبيل المثال، إذا كانت العملية المتزامن هي I / O، لم يكن لديك وحدة المعالجة المركزية لانتظار I / O لإكمال. فإنه يحتاج فقط لبدء العملية، ويمكن بعد ذلك الانتقال إلى عمل آخر في حين أن / O الأجهزة I (وحدة تحكم القرص، واجهة الشبكة، الخ) لا و/ العمل I O. الأجهزة يتيح معرفة وحدة المعالجة المركزية عند الانتهاء من وضعها عن طريق قطع وحدة المعالجة المركزية، ونظام التشغيل ثم يسلم الحدث إلى التطبيق الخاص بك.

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

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

لا، المكالمات غير المتزامن لا تنطوي دائما المواضيع.

وأنها عادة ما تفعل بدء نوع من العملية التي تستمر بالتوازي مع المتصل. ولكن هذه العملية قد يتم التعامل معها من قبل عملية أخرى، من قبل نظام التشغيل، من خلال الأجهزة الأخرى (مثل وحدة تحكم القرص)، من قبل بعض أجهزة الكمبيوتر الأخرى على الشبكة، أو إنسان. المواضيع ليست هي السبيل الوحيد لإنجاز الأمور بشكل متواز.

وخيوط متعددة تشير إلى أكثر من عملية يحدث في نفس العملية. في حين ينتشر البرمجة المتزامن عبر العمليات. على سبيل المثال إذا عملياتي تدعو خدمة الإنترنت، والحاجة للموضوع لا تنتظر حتى تعود خدمة الإنترنت. هنا نستخدم البرمجة المتزامن الذي يسمح للموضوع لا تنتظر عملية في جهاز آخر لإكمال. وعندما يبدأ الحصول على رد من خدمة ويب يمكن أن يقطع الخيط الرئيسي القول اكتمال تلك الخدمة على شبكة الإنترنت معالجة الطلب. الآن موضوع الرئيسي يمكن معالجة النتيجة.

جافا سكريبت هي خيط واحد وغير متزامن.عندما تستخدم XmlHttpRequest، على سبيل المثال، فإنك تزوده بوظيفة رد اتصال سيتم تنفيذها بشكل غير متزامن عندما تعود الاستجابة.

لدى John Resig شرح جيد للمسألة ذات الصلة بكيفية القيام بذلك تعمل أجهزة ضبط الوقت في جافا سكريبت.

وكان ويندوز دائما معالجة غير متزامن منذ زمن غير وقائية (الإصدارات 2.13، 3.0، 3.1، الخ) باستخدام حلقة رسالة، الطريق أمام دعم المواضيع حقيقية. من أجل الإجابة على سؤالك، لا، فإنه ليس من الضروري إنشاء موضوع لتنفيذ معالجة غير متزامن.

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

والموضوع التنفيذ هو مصطلح غامض. في أنظمة المهام التعاونية مثل أوائل OS'es ويندوز وماكنتوش، وموضوع التنفيذ يمكن ببساطة أن تكون نفس العملية التي قدم الطلب تشغيل كومة أخرى، مؤشر التعليمة، الخ ... ومع ذلك، عندما يتحدث الناس عموما حول المكالمات غير متزامن ، إلا أنها تعني عادة المكالمات التي يتم التعامل معها من قبل موضوع آخر إذا كان هو داخل العملية (أي داخل نفس العملية) أو عن طريق عملية أخرى إذا كان بين العملية.

لاحظ أن بين العمليات (أو بين العمليات) الاتصالات (IPC) وتعميمها لتشمل عادة الاتصالات عملية داخل، لأن التقنيات لقفل، والبيانات مزامنة وعادة ما تكون هي نفسها بغض النظر عن معالجة المواضيع المنفصلة المدى التنفيذ في.

وبعض النظم تسمح لك للاستفادة من التزامن في نواة لبعض المرافق التي تستخدم رد. بالنسبة لمثيل غامضة نوعا ما، استخدمت الاسترجاعات IO غير متزامن لتنفيذ عدم عرقلة الانترنت يقطع في الأيام تعدد المهام عدم وقائية من ماك نظام 6-8.

وهذه الطريقة يكون لديك تيارات تنفيذ المتزامنة "في" لك البرنامج دون المواضيع <م> على هذا النحو .

وغير المتزامن يعني فقط ان كنت لا تحجب البرنامج في انتظار شيء ما (استدعاء دالة، الجهاز، وما إلى ذلك) وحتى النهاية. ويمكن تنفيذها في موضوع مستقل، ولكن من الشائع أيضا استخدام موضوع مخصص للمهام متزامن والتواصل عبر نوع من نظام الحدث وبالتالي تحقيق متزامنة مثل السلوك.

وهناك أمثلة على برامج غير متزامن ترابط واحد. شيء من هذا القبيل:

...do something
...send some async request
while (not done)
    ...do something else
    ...do async check for results

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

في بعض الأحيان، اعتمادًا على الموقف، قد ترغب في استدعاء طريقة غير متزامنة ولكن جعلها تبدو للمستخدم متزامنة (أي.block حتى تشير الطريقة غير المتزامنة إلى اكتمالها).يمكن تحقيق ذلك من خلال Win32 APIs مثل WaitForSingleObject.

ان عملية غير متزامنة هي عملية تستمر في الخلفية بعد بدئها، دون إجبار المتصل على الانتظار حتى تنتهي قبل تشغيل تعليمات برمجية أخرى.

بدلاً من حظر برنامج الاستدعاء (أو سلسلة الرسائل) حتى وصول الاستجابة، سيرسل التنفيذ غير المتزامن (يسمى أيضًا عدم الحظر) طلبًا إلى قاعدة البيانات أو خدمة الويب أو أي شيء آخر، ثم يعود على الفور، مما يسمح لبرنامجك بمواصلة تشغيل تعليمات برمجية أخرى بينما ترسل الخدمة عن بعد الرد.بمجرد وصول الاستجابة، سيقوم النظام بتشغيل رد اتصال (إما في حلقة الرسالة الخاصة بك أو في سلسلة منفصلة لإتمام الإدخال والإخراج، اعتمادًا على البيئة)، مما يتيح للتعليمات البرمجية الخاصة بك التعامل مع الاستجابة.

متعدد الخيوط يعني تشغيل أكثر من موضوع تنفيذ في وقت واحد.في هذا النموذج، تظل جميع العمليات متزامنة، لكن وحدة المعالجة المركزية ستنفذ عدة سلاسل عمليات متزامنة في نفس الوقت.

يعد تعدد العمليات أكثر منطقية عند استدعاء عمليات متعددة (ومستقلة) مرتبطة بوحدة المعالجة المركزية، على معالج متعدد النواة.على سبيل المثال، يمكن لبرنامج يقوم بتحليل كل بكسل في الصورة بشكل مستقل أن يقسم الصورة إلى شريط واحد لكل نواة وحدة المعالجة المركزية، ثم يقوم بتحليل كل شريط في خيطه الخاص في نفس الوقت.

اقرأ المزيد هنا - https://blog.slaks.net/2014-12-23/parallelism-async-threading-explained/

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