Latency: значения задержек, которые стоит знать каждому программисту

Обложка поста

Перевод статьи «Latency numbers every programmer should know»

Все операции, выполняемые компьютером, занимают определённое время. Чем ниже уровень, на котором операция происходит, тем она быстрее, и наоборот. Например, работать с кешем процессора быстрее, чем с оперативной памятью. Она, в свою очередь, быстрее жёсткого диска.

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

ОперацияВремя
Обращение к L1-кешу0.5 нс
Неверное предсказание перехода5 нс
Обращение к L2-кешу7 нс
(Раз)блокировка мьютекса25 нс
Обращение к оперативной памяти100 нс
Сжатие 1 KБ с помощью Zippy3 000 нс = 3 мкс
Отправка 2 KБ по сети с пропускной способностью 1 ГБ/с20 000 нс = 20 мкс
Произвольное чтение SSD150 000 нс = 150 мкс
Последовательное чтение 1 МБ из памяти250 000 нс = 250 мкс
Круговая задержка в пределах одного датацентра500 000 нс = 0.5 мс
Последовательное чтение 1 МБ из SSD*1 000 000 нс = 1 мс
Поиск дорожки на диске10 000 000 нс = 10 мс
Последовательное чтение 1 МБ с диска20 000 000 нс = 20 мс
Отправка пакета по пути Калифорния → Нидерланды → Калифорния150 000 000 нс = 150 мс

*предполагается использование SSD со скоростью 1 ГБ/с.

Не смешно? А здесь смешно: @ithumor