このソフトウェアはもともと、タスク、ツール、および状況の1つのセット用に開発されました。 しかし、新しいタスク、ツール、状況の絶え間ない流れに対処するために、徐々に変化しています。 そのようなソフトウェアはより複雑で脆弱になり、有用な変更を加えることがより困難になります(Lehman and Biledy、1985) 1 。 最終的には、最初からやり直して、新しいサブシステム、場合によっては完全に新しいシステムを最初から作成する方が適切です。
私はそれが本当だと確信しています。 原則として、新しい条件にソフトウェアを適切に適合させるには、新しいソフトウェアをゼロから作成するよりも多くの時間と労力が必要です。 プログラマーはこれを認めたくありませんが、証拠は明らかです。 オープンソースプロジェクトにはいくつかの有名な例があります。
マルチプロセスFirefox
Mozilla Firefoxはもともとすべてのタスクを1つのプロセスで実行していました。 Google Chromeのリリースにより、マルチプロセスモデルによりセキュリティとパフォーマンスが向上することが明らかになりました。 Mozilla開発者は間もなくFirefoxでマルチプロセッシングを実装する方法の計画を開始しました。 それは2007年でした。
ほぼ10年後、MozillaはついにマルチプロセスFirefoxを大勢の聴衆にリリースしました 。 この遅延は、欲求の欠如からまったく生じませんでした。 Mozillaには才能と意欲のある開発者がいます。 ただし、ChromeはFirefoxを変更するよりもはるかに短い時間でゼロから作成されました。 これには主に2つの理由があります。
- シングルプロセスアーキテクチャをマルチプロセスアーキテクチャに再構成するには、 多くの小さな変更が必要です。 一部の関数呼び出しは、プロセス間通信で置き換える必要があります。 一般的な状態はミューテックスでラップする必要があります。 キャッシュとローカルデータベースは同時アクセスをサポートする必要があります。
- Firefoxは、既存の拡張機能との互換性を維持する必要があります(または開発者に強制的に更新させる)。 Chromeは、このような制限なしにゼロから拡張機能用のAPIを作成しました。
しかし、状況はさらに悪化しています。 制限は相反します。内部アーキテクチャを再構築する必要がありますが、パブリックAPIはほとんど変更しません。 Mozillaがこれを行うのに10年かかったのも不思議ではありません。
イベント指向の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, , . . ↑