Me deparei com um post discutindo a velocidade de bifurcação no Cygwin, fornecendo uma 'taxa de garfo' esperada no Windows XP em torno de 30 a 50 por segundo ( link )
Eu tenho um Core 2 duo (1.79GHz) que eu esperaria obter resultados comparáveis, mas ele gerencia apenas cerca de 8 garfos por segundo (e às vezes muito menos):
$ while (true); do date --utc; done | uniq -c
5 Wed Apr 21 12:38:10 UTC 2010
6 Wed Apr 21 12:38:11 UTC 2010
1 Wed Apr 21 12:38:12 UTC 2010
1 Wed Apr 21 12:38:13 UTC 2010
8 Wed Apr 21 12:38:14 UTC 2010
8 Wed Apr 21 12:38:15 UTC 2010
6 Wed Apr 21 12:38:16 UTC 2010
1 Wed Apr 21 12:38:18 UTC 2010
9 Wed Apr 21 12:38:19 UTC 2010
Você pode sugerir algo que eu possa fazer para acelerar as coisas? Esta máquina age muito mais devagar no Cygwin do que outras que eu usei antes, e na verdade eram muito mais lentas.
Atualizar
Deixe-me justificar minha pergunta: não acredito que ter uma bifurcação mais rápida melhore minha vida magicamente, mas acredito que esse benchmark é um bom proxy para os problemas de desempenho que estou vendo no bash devido ao uso normal de executáveis externos para calcular valores. Percebo que percebo uma velocidade notável no Cygwin examinando meus scripts de inicialização do shell e completando o bash e tentando substituir comandos externos por internos; no Linux, isso não é um problema. Muitas vezes, porém, isso não é possível, e meu PC está atualmente com ~ 14s para iniciar um shell com um cache quente e sem carga.
Respostas:
Isso não tem nada a ver com o garfo ser lento.
Eu vi o cygwin rodar devagar quando o diretório "home" do Windows estava em uma unidade de rede. Cada comando procuraria ali binários que atrasavam tremendamente as coisas.
Veja se
é mais rápido; nesse caso, esse provavelmente é o seu problema
caso contrário, tente executar o bash via strace / ltrace (se eles funcionam no cygwin) e veja o que está fazendo quando leva 1 segundo para executar a data.
fonte
Receio que não haja muito que você possa fazer sobre isso.
O Windows não possui um
fork()
syscall nativo, portanto, o Cygwin precisa emular isso. A implementação desta emulação é muito ineficiente. (Consulte as Perguntas frequentes sobre o Cygwin )O MSYS2, que geralmente é usado em aplicativos em que se deseja um ambiente de linha de comando semelhante ao Linux, com todas as funcionalidades do Windows, é baseado no Cygwin, e é por isso que também é afetado por isso.
Na verdade, é tão ruim que um
fork()
no Windows seja pelo menos uma ordem de magnitude mais lento que no LinuxO exemplo acima mostra a diferença entre uma caixa do Windows 10 Pro de i5-2500k @ 4GHz e 32GiB de RAM e uma VPS de 1GiB de RAM de um núcleo e fraca
fonte
Você não está vendo garfos; você está vendo fork, exec, chamada do sistema para ler a hora do dia, formatar e converter a saída. Sem mencionar o que mais é o tempo compartilhado em paralelo.
Em que base você diz que as outras máquinas " eram realmente mais lentas"? Há muitas coisas que contribuem para a velocidade real de um computador e para a percepção do usuário sobre a velocidade do computador. Que tipo de coisa você está fazendo, onde garfos / s é uma boa medida de desempenho? Qual é a velocidade, arquitetura e quantidade de memória? Velocidade de E / S do disco e buffer?
O que você acha que fará mais forks / s: um Core i7 executando o Vista com 512 MB de RAM ou um Celeron executando um Linux mínimo com 2 GB?
fonte