War*_*ung 30
您遇到的问题不是Cygwin中的任意限制,您可以通过设置更改消除这些限制.这是Cygwin必须努力获得在其下构建的POSIX语义程序的方式的固有方面.
POSIX fork()系统调用在Windows上没有本机等价物,因此Cygwin被迫以非常低效的方式模拟它.Shell脚本fork()每次执行外部进程时都会调用它,这种情况发生得非常多,因为shell脚本语言相对于我们通常所说的编程语言而言是如此贫乏.外部程序是shell脚本如何完成任何后果的.
Cygwin还有其他低效率,但如果你对它进行了分析,你可能会发现这是速度最快的.在大多数地方,使用它构建的程序和底层操作系统之间的Cygwin层非常薄.Cygwin的开发人员需要花费很多精力来保持图层尽可能薄,同时仍然提供正确的POSIX语义.除了fork()Microsoft fork()在其操作系统中添加本机类型工具之外,调用仿真中当前不常见的厚度是不可避免的.他们这样做的动力并不是很好.
上面作为评论发布的解决方案也不错.
另一种可能性是通过drush脚本查看是否有对外部程序的调用,您可以使用shell内在函数或更高效的构造替换它们.我不希望通过这样做可以大幅度提高速度,但它具有很好的性能,你也可以加速Linux方面的速度.(fork()在Linux上效率很高,但启动外部程序仍然是一个很大的速度,你可能不需要像现在这样经常付费.)例如:
numlines=`grep somepattern $somefile | wc -l`
if [ $numlines -gt 0 ] ; then ...
Run Code Online (Sandbox Code Playgroud)
会运行得更快:
if grep -q somepattern $somefile ; then ...
Run Code Online (Sandbox Code Playgroud)
第一个版本可以说是更清晰,但它至少需要三个外部程序调用,而原始shell需要四个.(你看到了所有这些吗?)替换只需要一个外部程序调用.
stu*_*eek 11
还要看看减缓Cygwin启动速度的事情:
bash_profile,而不是bashrc.小智 6
你可以给Cygwin一个更高的优先级.
编写一个新的批处理文件,例如"cygstart.bat",其中包含以下内容:
start "Cygwin" /high C:\cygwin\Cygwin.bat
Run Code Online (Sandbox Code Playgroud)
该/high开关为shell提供了更高的进程优先级.