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

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

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

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

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

Операция Время
Обращение к L1-кешу 0.5 нс
Неверное предсказание перехода 5 нс
Обращение к L2-кешу 7 нс
(Раз)блокировка мьютекса 25 нс
Обращение к оперативной памяти 100 нс
Сжатие 1 KБ с помощью Zippy 3 000 нс = 3 мкс
Отправка 2 KБ по сети с пропускной способностью 1 ГБ/с 20 000 нс = 20 мкс
Произвольное чтение SSD 150 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 ГБ/с.