Degradação de software

No livro “A Era Eletromagnética: Trabalho, Amor e Vida, Quando os Robôs Governam o Mundo”, Robin Hanson discute brevemente a degradação do programa:

O software foi originalmente projetado para um conjunto de tarefas, ferramentas e situações. Mas está mudando lentamente para lidar com um fluxo constante de novas tarefas, ferramentas e situações. Esse software se torna mais complexo, frágil, é mais difícil fazer alterações úteis nele (Lehman e Biledy, 1985) 1 . No final, é melhor começar tudo de novo e escrever do zero novos subsistemas e, às vezes, sistemas completamente novos.

Estou certo de que é verdade. Como regra, a adaptação competente do software a novas condições leva mais tempo e esforço do que escrever um novo software a partir do zero. Os programadores não gostam de admitir isso, mas a evidência é óbvia. Existem vários exemplos conhecidos em projetos de código aberto.

Multiprocesso Firefox


O Mozilla Firefox inicialmente executou todas as tarefas em um processo. Com o lançamento do Google Chrome, ficou claro que um modelo de múltiplos processos melhora a segurança e o desempenho. Os desenvolvedores da Mozilla logo começaram a planejar como implementar o multiprocessamento no Firefox. Isso foi em 2007.

Quase dez anos depois, a Mozilla finalmente lançou o Firefox multiprocesso para o público em massa . Esse atraso não veio da falta de desejo. A Mozilla possui desenvolvedores talentosos e motivados. No entanto, o Chrome foi escrito do zero em muito menos tempo do que o Firefox levou para mudar. Há duas razões principais para isso:

  • A transformação de uma arquitetura de processo único em uma de processo múltiplo envolve muitas pequenas alterações. Algumas chamadas de função precisam ser substituídas por comunicações entre processos. O estado geral precisa ser envolto em mutexes. Os caches e bancos de dados locais devem oferecer suporte ao acesso simultâneo.
  • O Firefox deve manter a compatibilidade com extensões existentes (ou forçar os desenvolvedores a atualizá-las). O Chrome criou uma API para extensões do zero, sem essas restrições.

Mas a situação é ainda pior. As restrições se contradizem: você precisa reconstruir a arquitetura interna, mas deixa as APIs públicas praticamente inalteradas. Não admira que a Mozilla tenha levado dez anos para fazer isso.

Apache orientado a eventos


Apache httpd « ». 80, accept() fork(). read() write() . , close() exit().

, … . , . : 1995 . Apache , . , 10 000 . « » 1000 1000 . , . .

, Nginx . Slowloris.

Nginx 2007 , . Nginx Apache httpd . event Apache 2.2 2005 . . , , mod_php. 2012 , Apache 2.4 (MPM) . , prefork MPM-, Nginx. Apache / . MPM httpd2.

CPython GIL


Python — . , ( , ) . Python : .

GIL. :

CPython  — , . , CPython . ( GIL , ).

GIL . Python . GIL , . . GIL — . CPython, , , Google, Microsoft Intel, GIL .


, . , , , , . , . , . , .







1. « : ». , -. . , .

2. , httpd, , . .

Source: https://habr.com/ru/post/pt442064/


All Articles