سؤال

كنت اركض Drush البرامج النصية (ل دروبال) مع سيجوين على جهاز Windows السريع نسبيًا ، لكن لا يزال يتعين علي الانتظار حوالي دقيقة لأي أمر drush (على وجه التحديد ذاكرة التخزين المؤقت Drush واضحة ينفذ).

أنا متأكد تمامًا من أن الأمر يتعلق بسرعة Cygwin لأن زملائي المطورين (الذين يديرون Linux) يمكنهم تشغيل هذه البرامج النصية في حوالي 5 ثوان.

هل هناك طريقة لجعل cygwin استخدام المزيد من الذاكرة و/أو وحدة المعالجة المركزية لكل محطة؟

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

المحلول

المشكلة التي تواجهها ليست حدًا تعسفيًا في Cygwin التي يمكنك إجراؤها مع تغيير الإعدادات. إنه جانب متأصل في الطريقة التي يتعين على Cygwin أن تعمل على الحصول على برامج POSIX DERANTICS التي تم إنشاؤها بموجبها.

Posix fork() لا تحتوي استدعاء النظام على أي معادلة أصلية على Windows ، لذلك يُجبر Cygwin على محاكاةها طريقة غير فعالة للغاية. نصوص الصدفة تتسبب في دعوة إلى fork() في كل مرة يقومون فيها بتنفيذ عملية خارجية ، والتي تحدث كثيرًا نظرًا لأن لغات SHELL SCRIPT فقيرة للغاية بالنسبة لما نسميه عادة لغة البرمجة. البرامج الخارجية هي كيف تحصل برامج النصوص على أي شيء من النتيجة.

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

الحلول المنشورة أعلاه لأن التعليقات ليست سيئة.

احتمال آخر هو الذهاب من خلال drush البرنامج النصي ومعرفة ما إذا كانت هناك مكالمات إلى برامج خارجية يمكنك استبدالها بأوان الصيد أو بنيات أكثر كفاءة. لا أتوقع تحسنًا كبيرًا في السرعة من خلال القيام بذلك ، ولكن يحتوي على خاصية لطيفة ستسريعها على جانب Linux أيضًا. ((fork() هو فعال على Linux ، ولكن بدء البرامج الخارجية لا يزال بمثابة نجاح كبير في السرعة التي قد لا تضطر إلى دفعها كما تفعل حاليًا.) على سبيل المثال:

numlines=`grep somepattern $somefile | wc -l`
if [ $numlines -gt 0 ] ; then ...

سوف يعمل بشكل أسرع على النحو التالي:

if grep -q somepattern $somefile ; then ...

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

نصائح أخرى

انظر أيضًا إلى الأشياء التي تبطئ بدء تشغيل Cygwin:

  • قم بتقليص مسار Windows الخاص بك (إلى العظام العارية مثل ٪ Systemroot ٪ System32 ؛ ٪ Systemroot ٪)
  • قم بإزالة الأشياء التي لا تحتاجها من Bashrc و Bash_profile
  • انقل الأشياء التي تحتاجها فقط في نافذة الطرفية الخاصة بك من Bashrc إلى Bash_profile
  • وقت واحد كبير بشكل مدهش تمتص في Cygwin هو الانتهاء من باش. إذا كنت تستخدمه (ويجب عليك ذلك لأنه رائع) ، فإن إكمال المصدر فقط للأوامر التي تحتاجها (بدلاً من كلها والتي كانت هي الافتراضي). وكما ذكر أعلاه ، مصدرهم من bash_profile, ، ليس bashrc.

يمكنك إعطاء سيجوين أولوية أعلى.

اكتب ملف دفعة جديدة ، على سبيل المثال ، "cygstart.bat" مع المحتوى التالي:

start "Cygwin" /high C:\cygwin\Cygwin.bat

ال /high التبديل يعطي القشرة أولوية عملية أعلى.

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