سؤال

فما هي وكيف تعمل؟

يحدث أن يكون السياق SQL Server

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

المحلول

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

ومثلما كان لديك خادم الاستماع إلى عنوان IP / المنفذ للطلبات الواردة، ويمكن أيضا إعداد ملقم توجيه إخراج مسمى والتي يمكن الاستماع لطلبات. وفي كلتا الحالتين، يجب أن عملية العميل (أو مكتبة الوصول DB) يعرف عنوان معين (أو اسم الأنابيب) لإرسال الطلب. في كثير من الأحيان، وجود الافتراضي القياسية المستخدمة عادة (مثل الكثير من المنفذ 80 لHTTP، يستخدم الخادم SQL المنفذ 1433 في TCP / IP. \\. \ الأنابيب \ SQL \ الاستعلام عن توجيه إخراج مسمى).

ومن خلال إنشاء أنابيب اسمه إضافية، هل يمكن أن يكون خوادم DB متعددة تعمل، ولكل منها المستمعين طلب الخاصة.

ووالاستفادة من الأنابيب اسمه هو أنه عادة ما تكون أسرع بكثير، وتحرر الموارد مكدس الشبكة.

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

نصائح أخرى

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

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

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

وحتى أكثر مربكة، ويونيكس لديها ما يسمى "مأخذ يونكس" أو مقبس AF_UNIX، والذي يعمل أكثر مثل (ولكن ليس تماما مثل) على Win32 و"إخراج مسمى"، ويجري ثنائية الاتجاه.

أنابيب لينكس
آلية الاتصال بين العمليات أولاً ما يدخل أولاً يخرج أولاً (FIFO).

أنابيب غير محددة
على سطر الأوامر ، يمثله "|" بين اثنين من الأوامر.

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

لإنشاء أنبوب مسمى، يسمى "myPipe"، من سطر الأوامر (صفحة الرجل):

mkfifo myPipe  

لإنشاء أنبوب مسمى من c، حيث "اسم المسار" هو الاسم الذي تريد أن يحمله الأنبوب و"الوضع" يحتوي على الأذونات التي تريد أن يحصل عليها الأنبوب (صفحة الرجل):

#include <sys/types.h>
#include <sys/stat.h>
int mkfifo(const char *pathname, mode_t mode);

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

<اقتباس فقرة>   

[...] ماسورة التقليدي هو "غير مسمى" لأنه موجود مجهول واستمرت فقط من أجل طالما أن عملية قيد التشغيل. ماسورة اسمه هو استمرار النظام وجود ما وراء الحياة العملية ويجب أن يكون "غير المرتبطة" أو حذفها مرة واحدة لم تعد قيد الاستخدام. نعلق العمليات عموما إلى إخراج مسمى (عادة تظهر على شكل ملف) لأداء IPC (التواصل بين العملية).

وقارن

echo "test" | wc

إلى

mkdnod apipe p
wc apipe

ومرحاض ومنع حتى

echo "test" > apipe

وينفذ

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

A <م> المسمى الأنابيب هو مجرد وسيلة لربط بنشاط على أنبوب القائمة وبياناتها هوفيرينج المتابعة. انها لحالات حيث لا مزود يعرفون ما عملاء سيتم تناول البيانات.

والتواصل بين عملية (في الغالب) لتطبيقات ويندوز. مشابه لاستخدام مآخذ للاتصال بين التطبيقات في يونكس.

MSDN

هذا مقتطف من Technet (لذا لست متأكدًا من سبب كون الإجابة المميزة تشير إلى أن الأنابيب المسماة أسرع ؟؟):

الأنابيب المسماة مقابل.مآخذ TCP/IP

في بيئة شبكة محلية (LAN) سريعة، تكون مآخذ توصيل بروتوكول التحكم بالإرسال/بروتوكول الإنترنت (TCP/IP) وعملاء توجيهات الإخراج المسماة قابلة للمقارنة فيما يتعلق بالأداء.ومع ذلك، يصبح الفرق في الأداء بين عملاء TCP/IP مآخذ التوصيل وموجهات الإخراج المسماة واضحًا مع الشبكات الأبطأ، مثل شبكات الاتصال واسعة النطاق (WANs) أو شبكات الطلب الهاتفي.ويرجع ذلك إلى الطرق المختلفة التي تتواصل بها آليات الاتصال بين العمليات (IPC) بين أقرانها.

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

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

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

تدعم مآخذ TCP/IP أيضًا قائمة الانتظار المتراكمة.يمكن أن يوفر هذا تأثيرًا سلسًا محدودًا مقارنة بأنابيب الاتصال المسماة مما قد يؤدي إلى حدوث أخطاء في انشغال توجيه الإخراج عند محاولة الاتصال بـ SQL Server.

بشكل عام، يُفضل TCP/IP في شبكة LAN أو WAN أو شبكة الطلب الهاتفي البطيئة، في حين أن الأنابيب المسماة يمكن أن تكون خيارًا أفضل عندما لا تكون سرعة الشبكة هي المشكلة، لأنها توفر المزيد من الوظائف وسهولة الاستخدام وخيارات التكوين.

وأنابيب الاسم في سياق يونيكس / لينكس يمكن استخدامها لجعل قذيفتي مختلفة للاتصال منذ قذيفة فقط لا يمكن مشاركة أي شيء مع آخر.

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

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

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

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

وهذه طريقة واحدة وبرنامج نصي واحد فقط يمكن أن تبدأ وتتوقف نفسها.

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

وأنابيب الاسم هو نظام ويندوز للتواصل بين العملية. في حالة الخادم SQL، إذا كان الملقم على نفس الجهاز مثل العميل، فمن الممكن استخدام أنابيب اسمه إلى يمكنك نقل البيانات، بدلا من TCP / IP.

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