软件降级

《电磁时代:机器人统治世界时的工作,爱情和生活》一书中罗宾·汉森(Robin Hanson)简要讨论了程序降级:

该软件最初是为一组任务,工具和情况而设计的。 但是它正在慢慢变化以应对源源不断的新任务,新工具和新情况。 这样的软件变得更加复杂,脆弱,很难对其进行有用的更改(Lehman和Biledy,1985年) 1 。 最后,最好从头开始并从头开始编写新的子系统,有时甚至是全新的系统。

我相信这是真的。 通常,与从头开始编写新软件相比,要使软件适应新条件需要更多的时间和精力。 程序员不喜欢承认这一点,但是证据是显而易见的。 开源项目中有几个著名的示例。

多进程Firefox


Mozilla Firefox最初在一个过程中运行所有任务。 随着Google Chrome浏览器的发布很明显,多进程模型提高了安全性和性能。 Mozilla开发人员很快开始计划如何在Firefox中实现多处理。 那是在2007年。

近十年后,Mozilla终于向大众发布了多进程Firefox 。 这种拖延根本不是出于缺乏欲望。 Mozilla具有才华横溢且积极进取的开发人员。 但是,Chrome从头开始编写的时间比Firefox更改所需的时间少得多。 这样做的主要原因有两个:

  • 将单进程体系结构重构为多进程体系结构涉及许多小的更改。 一些函数调用需要用进程间通信代替。 一般状态需要包装在互斥体中。 缓存和本地数据库必须支持并发访问。
  • Firefox应该保持与现有扩展的兼容性(或迫使开发人员对其进行更新)。 Chrome浏览器从头开始为扩展创建了API,没有这些限制。

但是情况更糟。 这些限制相互矛盾:您需要重建内部体系结构,但保留公共API几乎不变。 难怪Mozilla花了十年的时间来做到这一点。

面向事件的Apache


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/zh-CN442064/


All Articles