Tente ativar TCP_NODELAY .
Por padrão, o TCP usa o algoritmo de Nagle para coletar pequenos pacotes de saída, a fim de enviar todos de uma só vez como um grande pacote, o que pode ter um efeito prejudicial na latência.
Esta questão é baseada neste tópico em OpenOffice .
Estou usando o Python e a ponte do Office UNO para analisar documentos. Para a maior parte eu corro no meu Mac e giro uma instância de escritório para ouvir em localhost:
soffice --accept=socket,host=localhost,port=2002;urp;StarOffice.ServiceManager"
Usando isso, a execução de um documento de teste demora cerca de 2 segundos no meu Mac. No Linux, no entanto, exatamente o mesmo cenário é executado por cerca de 45 segundos, uma diferença de desempenho severa. E isso é no Mint, no Gentoo e no Ubuntu.
Curiosamente, usando o Office e conectando-se a ele por meio de um pipe nomeado:
soffice --accept="pipe,name=abraxas;urp;StarOffice.ServiceManager"
é executado praticamente na mesma velocidade em todas as plataformas testadas: cerca de 1,5 segundos.
Pergunta : o que há de tão diferente entre as conexões de soquete para Mac e Linux, e por que o soquete do Linux é muito mais lento?
Tente ativar TCP_NODELAY .
Por padrão, o TCP usa o algoritmo de Nagle para coletar pequenos pacotes de saída, a fim de enviar todos de uma só vez como um grande pacote, o que pode ter um efeito prejudicial na latência.
Estou vendo um comportamento semelhante na minha máquina Ubuntu Desktop (portanto, não é relacionado ao X), e está levando ~ 45 segundos para ser concluído. Aqui estão os maiores ofensores com base em um strace
do processo soffice
:
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
68.50 23.948922 323 74067 1611 futex
23.90 8.356000 151927 55 poll
7.31 2.555215 95 26915 recv
0.10 0.036301 18151 2 waitpid
0.06 0.019407 2 9586 send
0.05 0.016330 30 539 15 read
0.03 0.009430 1 16675 gettimeofday
Parece-me que pode haver alguns problemas em como eles implementaram sua sincronização de threads no Linux. Eu não tenho acesso a um Mac para comparar, mas esta é a linha de comando que eu executei:
strace -cf soffice --accept="socket,host=localhost,port=2002;urp;StarOffice.ServiceManager" --headless
Tags networking sockets linux macos