Sự cố bạn đang gặp phải không phải là giới hạn tùy ý trong Cygwin mà bạn có thể thực hiện với thay đổi cài đặt. Đó là một khía cạnh vốn có của cách Cygwin đã làm việc để có được các chương trình ngữ nghĩa POSIX được xây dựng theo mong đợi.
Cuộc gọi hệ thống POSIX fork()
không có tương đương gốc trên Windows, vì vậy Cygwin buộc phải mô phỏng nó trong a very inefficient way. Shell script gây ra một cuộc gọi đến fork()
mỗi khi chúng thực hiện một quá trình bên ngoài, điều này xảy ra khá nhiều vì các ngôn ngữ kịch bản lệnh shell rất nghèo nàn so với những gì chúng ta thường gọi là ngôn ngữ lập trình. Các chương trình bên ngoài là cách các kịch bản lệnh shell nhận được bất kỳ thứ gì do hậu quả được thực hiện.
Có những sự thiếu hiệu quả khác trong Cygwin, mặc dù nếu bạn đã lược tả, bạn có thể thấy rằng đó là tốc độ số một. Ở hầu hết các nơi, lớp Cygwin giữa một chương trình được xây dựng bằng cách sử dụng nó và hệ điều hành cơ bản là khá mỏng. Các nhà phát triển của Cygwin mất rất nhiều khó khăn để giữ cho lớp mỏng nhất có thể trong khi vẫn cung cấp ngữ nghĩa POSIX chính xác. Độ dày không phổ biến hiện tại trong giả lập cuộc gọi fork()
là không thể tránh khỏi ngắn của Microsoft thêm một cơ sở loại fork()
gốc cho hệ điều hành của họ. Ưu đãi của họ để làm điều đó không phải là rất tốt.
Các giải pháp được đăng ở trên vì nhận xét không tệ.
Một khả năng khác là xem qua tập lệnh drush
và xem có cuộc gọi đến các chương trình bên ngoài mà bạn có thể thay thế bằng nội tại vỏ hoặc cấu trúc hiệu quả hơn không. Tôi sẽ không mong đợi một cải thiện tốc độ lớn bằng cách làm điều đó, nhưng nó có tài sản tốt đẹp mà bạn sẽ tăng tốc độ những thứ lên trên Linux là tốt. (fork()
là hiệu quả trên Linux, nhưng bắt đầu chương trình bên ngoài vẫn còn một tốc độ lớn nhấn mà bạn có thể không phải trả thường xuyên như bạn đang làm.) Ví dụ:
numlines=`grep somepattern $somefile | wc -l`
if [ $numlines -gt 0 ] ; then ...
sẽ chạy nhanh hơn như:
if grep -q somepattern $somefile ; then ...
Phiên bản đầu tiên được cho là rõ ràng hơn, nhưng yêu cầu ít nhất ba yêu cầu chương trình bên ngoài và với vỏ nguyên thủy, bốn. (Bạn có thấy tất cả chúng không?) Việc thay thế chỉ yêu cầu một chương trình bên ngoài gọi.
Nguồn
2010-03-25 22:05:49
Gắn một đĩa CD Ubuntu vào? :) – Rimian
Câu hỏi này giả định rằng hiệu suất của cửa sổ drush tương đương với drush linux và bộ nhớ hoặc CPU bị giới hạn. Đó không phải là một giả định hiển nhiên: nó có thể đơn giản là chậm hơn. – msw
Hãy thử ảo hóa ... với sự hỗ trợ phần cứng nó có thể thực sự tuyệt vời –