InfoQ

InfoQ

Notícias

Meus Favoritos

Faça oLogin ou Cadastre-se para ativar o recurso de favoritos por tempo ilimitado.

O conteúdo foi adicionado aos favoritos!

Houve um erro ao adicionar aos favoritos! Por favor, tente novamente.

O que há de errado com a Net::HTTP do Ruby?

Postado por Mirko Stocker , traduzido por Felipe Rodrigues em 12 Nov 2008

Seções
Desenvolvimento,
Arquitetura e Design
Tópicos
Ruby ,
Desempenho e Escalabilidade
Tags
HTTP ,
Ruby 1.9

"O que pode estar errado com o a implementação Net:HTTP do Ruby?", você poderia perguntar. Adam Nelson foi surpreendido pelo que ele viu em uma aplicação que transfere enormes quantidades de dados."O que realmente acontece é que a CPU redlines, e o dado é transferido em blocos de 1024 bytes.", Adam descobriu em sua primeira análise. O verdadeiro problema é que "isto põe um timeout em torno de cada única chamada rbuf_fill," escreve Alex Young, "então por padrão tem de lançar uma nova thread para cada 1K de dados recebidos".

Uma comparação entre diferentes implementações de diferentes bibliotecas Ruby e Ruby 1.8.6 mostraram que utilizam "duas vezes mais o uso da CPU enquanto o concorrente mais próximo", que é Ruby 1.8.7, que aparentemente usa um buffer maior (16K). Curiosamente, Ruby 1.9.0 tem o menor uso da CPU, que uma implementação que utiliza readpartial, "sem timeout para leitura de socket" e "String buffer pré-alocados para cada leitura ". Logo atrás está a RFuzz, uma implementação Ruby baseada no núcleo Mongrel por Zed Shaw.

Esta questão não é nova, em uma thread no ruby-talk mailinglist datada de 2006 jáse discutia o problema e alguns workarounds para evitá-lo.

Além disso, isto é também um bom exemplo de quão útil e valioso implementações open source podem ser.

Ué, cadê? por Leandro Silva Enviado
Re: Ué, cadê? por Felipe Rodrigues Enviado
  1. Voltar ao topo

    Ué, cadê?

    por Leandro Silva

    O texto não tá traduzido...

  2. Voltar ao topo

    Re: Ué, cadê?

    por Felipe Rodrigues

    Corrigido! =)

Conteúdo Educacional

Formando equipes de alto desempenho, parte 1: Início e fases de evolução

Nesta primeira parte de uma série sobre equipes de alto desempenho e gerenciamento Agile, veja uma introdução geral e uma apresentação dos estágios de formação das equipes.

Business Model Canvas, passo a passo

O Business Model Canvas é uma ferramenta estratégica para a construção visual de novos produtos ou serviços. Conheça cada um dos seus elementos e como preencher o Canvas, passo a passo.

Google Apps Script, Parte 2: Google Docs, triggers e envio de emails

Nessa segunda e última parte de uma série sobre o Google Apps Script, conheça como funciona o envio de emails, a conversão de documentos e como criar menus e triggers.

Serviços de cloud computing PaaS: um guia para desenvolvedores Java

Este artigo avalia seis dos mais importantes fornecedores de serviços de cloud computing PaaS para desenvolvedores Java, analisando critérios como desempenho, escalabilidade e tecnologias suportadas.

Canvas de Modelo de Negócios: uma contribuição para o sucesso de Startups

O Canvas de Modelo de Negócios é um novo modo de comunicar e suportar a validação iterativa, incremental e empírica de modelos de negócio de startups e novos produtos substituindo o plano de negócios.

Entrevista com Rebecca Parsons Parte 2: Agile Distribuído, Arquitetura vs. Design e SOA

Nesta segunda e última parte de uma entrevista exclusiva para InfoQ Brasil, Rebecca Parsons, CTO da ThoughtWorks, fala sobre o Agile Distribuído e técnicas para definição de arquiteturas.

Entrevista com Rebecca Parsons Parte 1: Agile nas Empresas e Arquitetura Evolucionária

Nessa primeira parte de uma entrevista com a CTO da ThoughtWorks, veja recomendações sobre formas de construir e arquitetar sistemas para obter o máximo de flexibilidade e responsividade a mudanças.

Agile das equipes à organização: o papel do gerente, estratégias e dicas para a adoção

Os gerentes de projetos podem assumir o papel crítico de liderar a introdução do Agile. Vejas conceitos, dicas e técnicas para apoiar esse processo de mudanças.