Похоже Норвиг answers this himself:
execute typical instruction 1/1,000,000,000 sec = 1 nanosec
fetch from L1 cache memory 0.5 nanosec
branch misprediction 5 nanosec
fetch from L2 cache memory 7 nanosec
Mutex lock/unlock 25 nanosec
fetch from main memory 100 nanosec
send 2K bytes over 1Gbps network 20,000 nanosec
read 1MB sequentially from memory 250,000 nanosec
fetch from new disk location (seek) 8,000,000 nanosec
read 1MB sequentially from disk 20,000,000 nanosec
send packet US to Europe and back 150 milliseconds = 150,000,000 nanosec
часть, где он говорит, что «выполнить типичную команду» = 1 нс означает CPU 1 ГГц (при условии, конечно, эффективной конвейерной обработки).
Я не знаю, где он берет эту информацию, но я доверяю Питер Норвигу быть надежным :-)
А как насчет оправдания ответа? Твердые числа, более или менее, известны. –
@Yuval - хороший вопрос. Но вы не указали в своем первоначальном вопросе, что вас интересует «почему», только «что». Также, какое именно оправдание вы ищете здесь? Объясните * почему * основная память занимает 100 нс? Как в объяснении всех логических схем, играющих роль? –
Я считаю, что мьютекс и основная память-выбор интересны и удивительны. Я бы догадался, что в любом случае это будет меньше, чем в четыре раза медленнее. Я бы подумал, что обычный Mutex-lock будет * требовать * извлечение основной памяти. Очевидно, я ошибаюсь - мне придется приспособить некоторые мои взгляды на многозадачные накладные расходы, я думаю. – Steve314