في تصميم نظام IO عالي الأداء ، هناك العديد من مفاهيم الأسماء التي غالباً ما تربكنا. التفاصيل كما يلي:
1 ما هو التزامن؟
2 ما هو غير متزامن؟
3 ما هو الحظر؟
4 ما هو عدم الحظر؟
5 ما هو الحظر المتزامن؟
6 ما هو عدم الحظر المتزامن؟
7 ما هو الحظر غير المتزامن؟
8 ما هو عدم الحظر غير المتزامن؟
دعني أعطيك مثالاً في الحياة:
إذا كنت تريد وعاء الأرز الدجاج الكونغ باو:
انسداد متزامن: تذهب إلى مطعم لطلب الطعام ، ثم انتظر هناك ، وصرخ: حسنًا؟
عدم الحظر المتزامن: بعد الطلب في مطعم ، ذهبت للسير في الكلب. ولكن بعد المشي لفترة من الوقت ، عاد إلى المطعم وصرخ: حسنًا؟
انسداد غير متزامن: عند السير في الكلب ، تلقيت مكالمة من المطعم قائلة إن الوجبة كانت جاهزة وطلبت منك الحصول عليها شخصيًا.
عدم التزامن غير متزامن: اتصل المطعم وقال: "نحن نعرف موقعك ، وسأرسله إليك لاحقًا ، حتى أتمكن من السير في الكلب براحة البال".
قبل أن نتعرف على المشكلات المذكورة أعلاه ، يجب أن نفهم أولاً ما هي المزامنة ، غير متزامنة ، حظر ، وغير محظورة. فقط عندما يتم فهم هذه المفاهيم الفردية بوضوح ، وبعد ذلك ، سيكون الأمر أسهل نسبيًا.
1. التزامن وعدم التزامن للتفاعل بين التطبيق والنواة.
2. الحظر وغير الحظر هي طرق مختلفة معتمدة من قبل العملية عند الوصول إلى البيانات وفقًا للحالة الجاهزة لعملية IO. بعبارة صريحة ، إنها طريقة تنفيذ لقراءة أو كتابة وظائف التشغيل. ضمن طريقة الحظر ، ستنتظر وظيفة القراءة أو الكتابة ، بدلاً من وظيفة القراءة أو الكتابة على الفور إلى إرجاع قيمة الحالة.
من الوصف أعلاه ، يمكننا أن نلخص جملة قصيرة بشكل أساسي: التزامن وعدم التزامن هما الغرض ، والحظر وعدم الحظر هي طرق التنفيذ.
1. التزامن: يشير إلى عملية المستخدم التي تؤدي إلى تشغيل IO والانتظار أو الاقتراع للتحقق مما إذا كانت عملية IO جاهزة. خرجت لشراء الملابس في الشارع وفعلت هذا الشيء بنفسي ، ولم أستطع فعل أي شيء آخر.
2. غير متزامن: يعني غير متزامن أنه بعد عملية المستخدم تؤدي إلى تشغيل عملية IO ، تبدأ في القيام بأشياءها الخاصة. عند الانتهاء من عملية IO ، سيتم إخطارها بإكمال IO (خاصية عدم التزامن هي الإخطار). أخبر صديقك أن يتناسب مع حجم الملابس وحجمها ولونها ، ودع صديقك يعهد ببيعه ، وبعد ذلك يمكنك القيام بأشياء أخرى. (عند استخدام IO غير المتزامن ، يقوم Java مندوب القراءة والكتابة إلى نظام التشغيل ، ويحتاج إلى تمرير عنوان المخزن المؤقت للبيانات وحجمه إلى نظام التشغيل)
3. الحظر: تعني طريقة الحجب المزعومة أنه عند محاولة قراءة واصف الملف ، إذا لم يكن هناك ما يقرأه أو أنه غير أقدم مؤقتًا ، فسيدخل البرنامج حالة انتظار حتى يتم القراءة أو القابلة للكتابة ، والانتقال إلى محطة الحافلات لإعادة الشحن. في هذا الوقت ، لم يكن إعادة الشحن موجودًا (ربما ذهب إلى المرحاض) ، ثم ننتظر هنا حتى يعود إعادة الشحن. (بالطبع ، ليس هذا هو الحال في المجتمع الحقيقي ، ولكن هذا هو الحال بالفعل في أجهزة الكمبيوتر.)
4. عدم الحظر: في حالة عدم الحظر ، إذا لم يكن هناك ما لا يمكن قراءة أو كتابة وظيفة القراءة والكتابة ستعود على الفور دون انتظار. عندما يسحب البنك الأموال للتعامل مع الأعمال التجارية ، سوف نتلقى إيصالًا صغيرًا. بعد أن نتلقى ذلك ، يمكننا اللعب مع هواتفنا المحمولة أو الدردشة مع الآخرين. عندما ننتقل ، سوف يخطرنا متحدث البنك ، ويمكننا الذهاب.
يتم تقسيم عملية IO فعليًا إلى خطوتين: بدء طلب IO وعملية IO الفعلية.
الفرق بين IO المتزامن و IO غير المتزامن هو ما إذا كانت الخطوة الثانية محظورة. إذا كانت IO الفعلية قراءة وكتابة قم بحظر عملية الطلب ، فسيكون IO متزامنًا.
الفرق بين منع IO و IO غير المحظور في الخطوة الأولى ، سواء تم حظر طلب IO. إذا تم حظره حتى يتم الانتهاء منه ، فهو الحظر التقليدي IO. إذا لم يتم حظره ، فهو IO غير المحظور.
يهدف التزامن وغير المتزامن إلى التفاعل بين التطبيق والنواة. يشير التزامن إلى عملية المستخدم التي تؤدي إلى عمليات IO والانتظار أو الاقتراع لمعرفة ما إذا كانت عملية IO جاهزة. يعني عدم التزامن أن عملية المستخدم تبدأ في القيام بأشياء خاصة بها بعد تشغيل عملية IO ، وعندما تم الانتهاء من عملية IO ، سيتم إخطار إكمال IO.
يعد الحظر وغير المحظور طرقًا مختلفة من قبل العملية عند الوصول إلى البيانات وفقًا للحالة الجاهزة لعملية IO. بعبارة صريحة ، إنها طريقة تنفيذ لقراءة أو كتابة وظائف التشغيل. ضمن طريقة الحظر ، ستنتظر وظيفة القراءة أو الكتابة ، بدلاً من وظيفة القراءة أو الكتابة على الفور إلى إرجاع قيمة الحالة.
لذلك ، يمكن تقسيم عمليات IO إلى ثلاث فئات: الحظر المتزامن (أي العمليات الحيوية المبكرة) ، غير متزامنة غير الحظر (NIO) ، وغير متزامن غير متزامن (AIO).
الحظر المتزامن (BIO):
وبهذه الطريقة ، بعد أن تبدأ عملية المستخدم عملية IO ، يجب أن تنتظر إكمال عملية IO. فقط بعد اكتمال عملية IO حقًا ، يمكن لعملية المستخدم تشغيل. ينتمي طراز IO التقليدي في Java إلى هذه الطريقة.
عدم الحظر المتزامن (NIO):
وبهذه الطريقة ، يمكن لعملية المستخدم العودة للقيام بأشياء أخرى بعد إطلاق عملية IO ، ولكن تحتاج عملية المستخدم إلى السؤال عما إذا كانت عملية IO جاهزة من وقت لآخر ، مما يتطلب من عملية المستخدم أن تسأل باستمرار ، وبالتالي تقديم مضيعة غير ضرورية لموارد وحدة المعالجة المركزية. من بينها ، حاليًا ، NIO's Nio متزامن غير محظور IO.
غير متزامن غير الحظر (AIO):
وبهذه الطريقة ، بعد أن يبدأ التطبيق في عملية IO ، لا ينتظر إكمال عملية IO الخاصة بـ kernel ، وسيقوم بإخطار التطبيق بعد أن تكمل kernel عملية IO.
حظر متزامن IO (Java Bio):
تتم مزامنة وحظر ، وضع تنفيذ الخادم هو الاتصال بخيط واحد ، أي عندما يكون لدى العميل طلب اتصال ، يحتاج الخادم إلى بدء مؤشر ترابط للمعالجة. إذا لم يفعل هذا الاتصال أي شيء ، فسيؤدي ذلك إلى حدوث نفقات غير ضرورية للخيط ، وبالطبع يمكن تحسينه من خلال آلية تجمع الخيوط.
متزامن غير متزامن IO (Java NIO):
عدم الحظر المتزامن ، وضع تنفيذ الخادم هو طلب مؤشر ترابط واحد ، أي أن طلبات الاتصال المرسلة من العميل سيتم تسجيلها مع Multiplexer. استطلاعات Multiplexer استطلاعات الاتصال بطلب الإدخال/الإخراج ويبدأ مؤشر ترابط للمعالجة. تحتاج عملية المستخدم أيضًا إلى السؤال عما إذا كانت عملية IO جاهزة من وقت لآخر ، الأمر الذي يتطلب من عملية المستخدم أن تسأل باستمرار.
حظر غير متزامن IO (Java NIO):
وبهذه الطريقة ، بعد أن يبدأ التطبيق في عملية IO ، لا ينتظر إكمال عملية IO الخاصة بـ kernel ، وسيقوم بإخطار التطبيق بعد أن تكمل kernel عملية IO. هذا هو في الواقع الفرق الأكثر أهمية بين التزامن وغير المتزامن. يجب أن تنتظر التزامن أو تسأل بنشاط عما إذا كان IO قد اكتمل. فلماذا تم حظره؟ نظرًا لأنه يتم إجراء مكالمات Select System في هذا الوقت ، وتنفيذ وظيفة SELECT نفسها يحظر ، وميزة واحدة لاستخدام وظيفة SELECT هي أنه يمكنه الاستماع إلى مقابض الملفات المتعددة في نفس الوقت (إذا كان من منظور UNP ، فإن SELECT هي عملية متزامنة. لأنه بعد تحديد ، تحتاج العملية أيضًا إلى قراءة البيانات وكتابةها) ، وبالتالي تحسين توافق النظام!
(Java Aio (Nio.2)) غير متزامن غير حظر IO:
في هذا الوضع ، تحتاج عملية المستخدم فقط إلى بدء تشغيل IO والعودة على الفور. بعد الانتهاء من عملية IO حقًا ، سيتم إخطار التطبيق بإنجاز عملية IO. في هذا الوقت ، تحتاج عملية المستخدم فقط إلى معالجة البيانات ولا تحتاج إلى تنفيذ عمليات القراءة والكتابة الفعلية ، لأن عمليات القراءة أو الكتابة الحقيقية قد اكتملت بواسطة kernel.
تحليل السيناريوهات المعمول بها للسيرة الحيوية و NIO و AIO:
طريقة الحيوية مناسبة للبنية ذات الاتصالات الصغيرة نسبيًا والاتصالات الثابتة. تتطلب هذه الطريقة موارد خادم عالية ويقتصر التزامن على التطبيقات. هذا هو الخيار الوحيد قبل JDK1.4 ، لكن البرنامج بديهي وبسيط وسهل الفهم.
طريقة NIO مناسبة للبنية مع عدد كبير من الاتصالات والاتصالات القصيرة نسبيا (تشغيل الضوء) ، مثل خوادم الدردشة. يقتصر التزامن على التطبيقات وله برمجة معقدة نسبيًا. بدأ JDK1.4 في دعمه.
تُستخدم طريقة AIO للبنية مع عدد كبير من الاتصالات والاتصال الطويل نسبيًا (إعادة التشغيل) ، مثل خوادم الألبوم ، التي تدعو بالكامل إلى نظام التشغيل للمشاركة في العمليات المتزامنة ، والبرمجة معقدة نسبيًا. بدأ JDK7 في دعمه.
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.