Ultrapassando os limites do sistema operacional

Raymond Chen observa que, se o senhor tiver que perguntar onde estão os limites do sistema operacional, está provavelmente está fazendo algo errado:

Se o senhor é

janelas de aninhamento com mais de 50 níveis de profundidade
ou

menus de aninhamento com mais de 25 níveis de profundidade
ou

Criação de uma caixa de diálogo com mais de 65535 controles
,
ou aninhando itens de visualização em árvore com mais de 255 níveis de profundidade,
então o design da sua interface de usuário precisa ser seriamente repensado,
porque o senhor acabou de criar um pesadelo de usabilidade.

Se o senhor tiver que perguntar sobre
o número máximo de threads que um processo pode criar
ou
o comprimento máximo de uma linha de comando
ou
o tamanho máximo de um bloco de ambiente
ou
a quantidade máxima de dados que o senhor pode armazenar no registroo senhor provavelmente tem algumas falhas de projeto bastante sérias em seu programa.

Não estou dizendo que conhecer os limites não seja útil, mas em muitos casos,
se o senhor tiver que perguntar, é porque não pode pagar.

Em geral, concordo com Raymond. Fazer esse tipo de pergunta definitivamente levanta bandeiras vermelhas. As condições de borda nunca devem ser um objetivo, e se o seu projeto estiver se aproximando tanto de uma condição de borda do sistema operacional, o senhor está fazendo algo incrivelmente brilhante ou incrivelmente estúpido. Adivinhe qual é mais comum?

No entanto, isso também pode ser surpreendente a rapidez com que o senhor pode se deparar com os limites do sistema operacional— mesmo quando o senhor não está fazendo nada tão incomum.

Ao pesquisar posts de blog, costumo abrir muitas janelas e guias do navegador. Pelo menos duas vezes por semana, tenho tantos navegadores e guias abertos que me deparo com alguma limitação interna do navegador e não consigo abrir mais nada. Meu sistema também fica um pouco instável nesse estado: clicar com o botão direito do mouse não mostra mais um menu e não consigo iniciar outros aplicativos. Mas se eu fechar algumas janelas ou guias do navegador, tudo voltará ao normal.

I prefiro usar o Internet Explorer para as tarefas cotidianas de navegaçãomas parece que o IE 7 é particularmente vulnerável a essas limitações. Fiz um teste rápido no qual abri o maior número possível de instâncias da página inicial do Yahoo, sem nenhuma outra coisa em execução:

Número máximo de janelas do IE7 que posso abrir 39
Número máximo de guias do IE7 que posso abrir 47

Não acho que ter 47 páginas da Web típicas abertas, distribuídas em algumas instâncias do Internet Explorer em meus três monitores, seja tão irracional. No entanto, esse é um limite difícil com o qual me deparo regularmente. É irritante. Parece que o IE6 tinha um limite semelhante; Theodore Smith descobriu que ele só conseguia abrir 38 páginas antes que novas janelas fossem congeladas. O Firefox se sai um pouco melhor no mesmo teste:

Número máximo de janelas do Firefox 2 que posso abrir 55
Número máximo de guias do Firefox 2 que posso abrir 100+

Esses não são limites rígidos no Firefox; são limites práticos. Depois de abrir 55 janelas do Firefox, o Vista me colocou automaticamente no modo Vista Basic devido à degradação do desempenho do Aero. Não consegui fechar todas as instâncias do Firefox e tive que encerrar a tarefa. As guias funcionaram melhor; fiquei entediado ao abrir novas guias da página inicial do Yahoo depois de cerca de setenta e desisti. Consegui fechar todas as guias sem incidentes. Acho que o senhor poderia ter pelo menos cem guias abertas no Firefox antes que algo adequadamente estranho acontecesse.

Então, aprendemos que o Internet Explorer é uma porcaria, certo? Talvez. Os resultados que vi se devem em grande parte a uma diferença arquitetônica fundamental entre os dois navegadores. O IE permite que o senhor escolha entre abrir páginas da Web no mesmo processo iexplore.exe (Abrir nova guia, Abrir nova janela) ou abrir páginas da Web em uma instância nova e isolada do iexplore.exe. Ao contrário do IE, o Firefox permite apenas um processo Firefox.exe, sempre. Isso claramente o ajuda a escalar melhor. Mas há uma desvantagem: se alguma página da Web falhar, ela derrubará todo o processo firefox.exe e todas as outras páginas da Web que o senhor tiver abertas.

Entendo a necessidade de limites práticos no sistema operacional. A maioria dos limites citados por Raymond é tão alta que chega a ser absurda. O senhor consegue imaginar submeter um usuário a um menu com 254 níveis de aninhamento? Abra um zilhão de cópias do bloco de notas e o senhor também terá problemas. Eu entendo isso. O objetivo é que o senhor manter esses limites do sistema operacional suficientemente acima do uso típico para que os desenvolvedores e os usuários, mesmo os usuários avançados, provavelmente não se deparem com eles.

Não tenho certeza se estamos enfrentando um limite de aplicativo ou de sistema operacional aqui; suspeito que seja um pouco dos dois. Ainda assim, estou desapontado. Um limite de apenas 47 páginas da Web com guias abertas a qualquer momento no Internet Explorer 7 parece artificial e inaceitavelmente baixo para mim. A introdução da metáfora de navegação com guias torna muito mais provável que os usuários abram muitas páginas da Web ao mesmo tempo. Eu esperaria que os desenvolvedores da equipe do IE testassem seus aplicativos em cenários de uso moderadamente intenso como esse. Esse é outro caso de falha no teste com um conjunto de dados razoavelmente grande.