C какой скоростью работает компьютер? Примерные цифры - в таблице.
Latency Comparison Numbers
Действие | ns | us | ms | |
---|---|---|---|---|
L1 кэш - чтение | 0.5 | |||
Ошибочное предсказание ветви (*) | 3 | |||
L2 кэш - чтение | 4 | 8x L1 cache | ||
Захват/освобождение мьютекса | 17 | |||
Оперативная память - чтение | 100 | 25x L2 cache, 200x L1 cache | ||
Передача 1Кбайт по сети с пропускной способностью 1 Gb | 10,000 | 10 | ||
Считать рандомно 4K с SSD | 150,000 | 150 | ~1GB/sec SSD | |
Cчитать 1 MB последовательно из основной памяти | 250,000 | 250 | ||
Round trip в пределах одного датацентра (*) | 300,000 | 500 | ||
Считать последовательно 1 MB с SSD | 1,000,000 | 1,000 | 1 | ~1GB/sec SSD, 4X memory |
Считать из постоянной памяти (диска) | 10,000,000 | 10,000 | 10 | 20x datacenter roundtrip |
Считать 1 MB последовательно из постоянной памяти (диска) | 20,000,000 | 20,000 | 20 | 80x memory, 20X SSD |
Трансконтинентальная передача TCP-пакета US->Europe->US | 150,000,000 | 150,000 | 150 |
https://gist.github.com/GLMeece/b00c9c97a06a957af7426b1be5bc8be6
1
ns =10^-9
секунд1
µs =10^-6
секунд =1,000
ns1
ms =10^-3
секунд =1,000
µs =1,000,000
ns
Ошибочное предсказание ветви (branch mispredict) — ситуация, когда процессор видит ветвление, и пытается догадаться, каким путём пойдёт программа, но ошибается. Тогда ему требуется время на удаление инструкций ветви и загрузку инструкций другой ветви.
Round trip в пределах одного датацентра - передача данных от одной машины к другой и обратно в пределах одного датацентра.
Для сравнения:
Действие | ||
---|---|---|
За какое время человеческий глаз воспринимает изображение | 13 | ms |
Моргание глазами | 100 | ms |
Время взаимодействия глаз - компьютерная мышь | 200 | ms |
Эти же цифры в виде диаграммы:
https://colin-scott.github.io/personal_website/research/interactive_latency.html
Чтобы лучше воспринять масштаб, инфографика с аналогиями, понятными человеку, здесь:
https://gist.github.com/hellerbarde/2843375?permalink_comment_id=1896153#gistcomment-1896153
И в завершение, игра на понимание скорости исполнения кода: