質問

私は走っています drush スクリプト(for Drupal) と Cygwin 私の比較的速いWindowsマシンでですが、私はまだ待たなければなりません 約1分 任意のDrushコマンドの場合(具体的に Drush Cache Clear 実行する)。

私の仲間の開発者(Linuxを実行している)がこれらのスクリプトを約5秒で実行できるので、Cygwinの速度と関係があると確信しています。

Cygwinにターミナルごとにより多くのメモリおよび/またはCPUを使用させる方法はありますか?

役に立ちましたか?

解決

あなたが遭遇している問題は、Cygwinの任意の制限ではなく、設定の変更で消え去ることができます。これは、Cygwinがその下で構築されたPOSIXセマンティクスプログラムを予想するために働かなければならない方法の固有の側面です。

ポジックス fork() システムコールにはWindowsにネイティブに相当するものがないため、Cygwinはでそれをエミュレートすることを余儀なくされています 非常に非効率的な方法. 。シェルスクリプトが呼び出しを引き起こします fork() 彼らが外部プロセスを実行するたびに、シェルスクリプト言語が通常プログラミング言語と呼ばれるものと比較して非常に多くのことが起こります。外部プログラムは、シェルスクリプトが結果のことを行う方法です。

Cygwinには他の非効率性がありますが、プロファイルした場合、おそらくそれがナンバーワンの速度であることがわかります。ほとんどの場所で、それを使用して構築されたプログラムと基礎となるOSの間のCygwin層はかなり薄いです。 Cygwinの開発者は、正しいPOSIXセマンティクスを提供しながら、層を可能な限り薄く保つために多くの痛みを抱えています。現在の珍しい厚さ fork() コールエミュレーションは、ネイティブを追加するマイクロソフトの不可避なものです fork() OSに施設を入力します。それを行うための彼らのインセンティブはあまり良くありません。

コメントとして上記のソリューションは悪くありません。

別の可能性は、を通過することです drush スクリプトと、Shell Intrinsicsまたはより効率的な構成要素に置き換えることができる外部プログラムへの呼び出しがあるかどうかを確認します。それを行うことで大規模なスピードの改善を期待していませんが、Linux側でも物事をスピードアップする素晴らしい特性があります。 (fork() Linuxでは効率的ですが、外部プログラムを開始することは、現在のように頻繁に支払う必要がないかもしれない大きなスピードヒットです。

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

より速く実行されます:

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

最初のバージョンは間違いなく明確ですが、少なくとも3つの外部プログラムの呼び出しが必要で、プリミティブシェルが必要です。 . 。 (それらすべてが表示されますか?)交換には、外部プログラムの呼び出しのみが必要です。

他のヒント

また、Cygwinのスタートアップを遅くするものも見てください。

  • Windowsパスをトリミングします(%SystemRoot% System32;%SystemRoot%のような裸の骨へ)
  • bashrcとbash_profileから必要のないものを削除します
  • ターミナルウィンドウで必要なものをbashrcからbash_profileに移動する
  • 驚くほど大きな時間を吸う1つのCygwinは、Bashの完成です。あなたがそれを使用している場合(そしてあなたはそれが素晴らしいのであなたはすべきです)、あなたが必要とするコマンドのためにソース完了のみ(以前はデフォルトであったものすべてではなく)。そして、上記のように、それらからそれらを調達します bash_profile, 、 いいえ bashrc.

Cygwinに優先度を高めることができます。

次のコンテンツを含む「Cygstart.BAT」など、新しいバッチファイルを記述します。

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

/high スイッチはシェルの優先度が高い。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top