Question

Je dirige Drush scripts (pour Drupal ) avec Cygwin sur mon windows relativement rapide la machine, mais je dois encore attendre une minute pour toute commande drush (en particulier cache drush clair pour exécuter).

Je suis tout à fait sûr qu'il a quelque chose à voir avec la vitesse de Cygwin depuis mes collègues développeurs (qui exécutent Linux) peuvent exécuter ces scripts dans environ 5 secondes.

Y at-il un moyen de faire Cygwin utiliser plus de mémoire et / ou CPU par terminal?

Était-ce utile?

La solution

Le problème que vous utilisez en est pas une limite arbitraire dans Cygwin que vous pouvez faire partir avec un changement des paramètres. Il est un aspect inhérent de la façon dont Cygwin doit travailler pour obtenir la sémantique POSIX programmes construits en dessous attendent.

L'appel système fork() n'a pas d'équivalent POSIX natif sur Windows, donc Cygwin est obligé de l'imiter dans une manière très inefficace. Les scripts shell provoquent un appel à fork() chaque fois qu'ils exécutent un processus externe, ce qui arrive beaucoup depuis les langages de script shell sont si pauvres par rapport à ce que nous avions normalement appeler un langage de programmation. Les programmes externes sont comment les scripts shell obtenir quoi que ce soit de conséquence fait.

Il existe d'autres inefficacités dans Cygwin, mais si vous PROFILES, vous trouverez probablement que c'est le numéro un coup de vitesse. Dans la plupart des endroits, la couche Cygwin entre un programme construit en utilisant et le système d'exploitation sous-jacente est assez mince. Les développeurs de Cygwin prennent beaucoup de soin de garder la couche aussi mince que possible tout en fournissant la sémantique correcte de POSIX. L'épaisseur actuelle rare dans l'émulation d'appel fork() est inévitable à court de Microsoft l'ajout d'une installation de type natif fork() à leur système d'exploitation. Les incitations à faire qui ne sont pas très bien.

Les solutions ci-dessus affichées sous forme de commentaires ne sont pas mauvais.

Une autre possibilité est de passer par le script drush et voir s'il y a des appels à des programmes externes, vous pouvez remplacer par intrinsics shell ou des constructions plus efficaces. Je ne serais pas attendre à une amélioration considérable de la vitesse en faisant cela, mais il a la propriété belle que vous accélérer les choses du côté Linux. (fork() est efficace sur Linux, mais à partir des programmes externes est encore une grande vitesse a frappé que vous ne pouvez pas payer aussi souvent que vous le faites actuellement.) Par exemple:

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

irait plus vite que:

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

La première version est sans doute plus claire, mais il faut au moins trois invocations de programmes externes, et avec des coquillages primitifs, quatre . (Voyez-vous tous?) Le remplacement ne nécessite qu'un seul appel de programme externe.

Autres conseils

Regardez aussi les choses qui ralentissent le démarrage Cygwin:

  • Coupez votre PATH (Windows aux os nus comme% SystemRoot% \ system32;% SystemRoot%)
  • Supprimer des choses que vous n'avez pas besoin de bashrc et bash_profile
  • Déplacer des choses que vous ne avez besoin dans votre fenêtre de terminal de bashrc à bash_profile
  • Une fois étonnamment grand allaiteront en Cygwin est terminé Bash. Si vous utilisez (et vous devriez parce qu'il est grand), seule la fin de source pour les commandes dont vous avez besoin (plutôt que tous qui était autrefois la valeur par défaut). Et, comme mentionné ci-dessus, les bash_profile de la source, et non bashrc.

Vous pouvez donner une priorité plus élevée Cygwin.

Ecrire un nouveau fichier de commandes, par exemple, « cygstart.bat » avec le contenu suivant:

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

Le commutateur /high donne la coquille une priorité de processus supérieur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top