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
1ns =10^-9секунд1µs =10^-6секунд =1,000ns1ms =10^-3секунд =1,000µs =1,000,000ns
Ошибочное предсказание ветви (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
И в завершение, игра на понимание скорости исполнения кода: