Все операции, выполняемые компьютером, занимают определённое время. Чем ниже уровень, на котором операция происходит, тем она быстрее, и наоборот. Например, работать с кешем процессора быстрее, чем с оперативной памятью. Она, в свою очередь, быстрее жёсткого диска.
Зная, сколько времени занимают те или иные операции, можно создавать более эффективные программы. В таблице представлены значения задержек для самых распространённых операций.
Операция | Время |
---|---|
Обращение к 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 ГБ/с.
Перевод статьи «Latency numbers every programmer should know»