TGViewer
DEV: Рубиновые тона DEV: Рубиновые тона @dev_in_ruby_colors · 3.28K subscribers
Post #961 2.19K
Закон Амдала

Есть такой интересный закон, придуманный Джином Амдалом несколько десятилетий назад, его время от времени упоминают в контексте информационных систем, так что знать его суть не помешает.

Вообще, смысл данного закона очень простой: если мы "улучшаем" (ускоряем) *часть* некой системы, то общий эффект на быстродействие *всей* системы будет зависеть от того, насколько этот компонент был важен (то есть какой процент времени работа с ним занимает) и насколько мы его улучшили. Звучит как пассаж от капитана очевидность, но для оценки есть конкретная формула.

S = 1 / ( (1 - a) + (a / k) )


S - это то, насколько система в общем будет работать (в полтора, два раза и тд)

a - процент времени, который занимает работа конкретного компонента (выражается от 0.0 до 1.0)

k - фактор "улучшения"

Ну, к примеру, если мы знаем, что в нашей системе определённый компонент затрачивает 60% всего времени, необходимого для выполнения задачи, и мы улучшаем (ускоряем) этот компонент аж в 3 раза, то по факту S будет равно 1.67, то есть вся система ускорится чуть более, чем в полтора раза. То есть, казалось бы, мы очень серьёзно улучшили немалую часть системы, но окончательная выгода оказалась не такой уж большой.

Вообще говоря, этот закон может применяться далеко не только в информационных системах. К примеру, водитель грузовика знает, что ему нужно проехать 2500 километров, а скорость будет составлять условные 100 км/ч. Значит, вся поездка займёт 25 часов без учёта остановок.

Тогда вопрос - если мы предположим, что на участке пути в 1500 км можно ехать со скоростью в 150 км/ч, то насколько быстрее мы реально доедем? Ответить на этот вопрос несложно.

Участок в 1500 километров из всей дороги в 2500 км - это 60%, то есть a = 0.6.

Если мы едем на этом участке 150 км/ч, то k = 1.5, то есть в полтора раза быстрее.

Следовательно, финальное S равно 1.25, иными словами, приедем мы на 5 часов раньше.

Любопытно, что будет, если одну из частей системы мы сделаем настолько быстрой, что она практически не затрачивает никакого времени (это время настолько мало, что им можно пренебречь).

То есть что будет, если k равно бесконечности? В этом случае кусок a / k в формуле уходит, потому что значение будет стремиться к нулю. Тогда вся формула превращается в S = 1 / ( 1 - a ). Следовательно, даже если мы возьмём 60% всей системы и ускорим её так, что она будет выполнять необходимые операции мгновенно, всё равно общий рост производительности будет только 2.5 (т.к 1 / 0.4). Вот такая, понимаешь, загогулина.
  • ❤ 11
  • 🔥 7
  • 👍 2
More from @dev_in_ruby_colors
  1. Sep 28, 2026Github буйствует
  2. Sep 26, 2026В этом уроке по абстрактной алгебре говорим про области целостности, делители нуля, характ…
  3. Sep 22, 2026А тем временем сказ о ведьмаке, потерявшем память, уже доступен в виде аудиокниги. Целых 1…
  4. Sep 20, 2026В этом уроке по абстрактной алгебре продолжаем говорить о кольцах: в частности о subrings…
  5. Sep 17, 2026Сделал обзор актуальных библиотек JS для сбора данных, 10 штук бодрых решений на все случа…
  6. Sep 13, 2026В общем, мне тут особо было нечего делать и я подумал создать небольшой скрипт для решения…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →