Anatoly Vorobey (avva) wrote,
Anatoly Vorobey
avva

Category:

в человеческом масштабе

(эта запись может быть интересна программистам)

Представьте себе, что вы работаете бюрократом в большой организации. Каждый день вы сидите за столом в большом кабинете (где кроме вас сидят еще несколько человек, каждый за своим столом) и разбираете какие-то папки с документами, то читаете бумаги, то исправляете что-то, то печатаете новый бланк и добавляете в папку. Этих папок огромное количество и вам все время нужно находить правильные. Самые нужные вы положили к себе на стол, другие стоят в многочисленных канцелярских шкафах по периметру кабинета. Некоторых папок нет даже в шкафах, и за ними надо посылать в архив.

Если вы уже читаете какую-то папку, то прочитать следующее слово у вас занимает меньше секунды. Если не читаете, но она лежит у вас на столе - то найти ее и прочитать нужную строку занимает секунд 10. Если на столе нет, но есть в шкафах в комнате, то найти ее по учетному номеру, принести к столу, прочитать что надо - это уже где-то минута. Но иногда ее нет в шкафах, и нужно посылать запрос в архив - или ненужную больше папку отправить в архив, чтобы освободить место в комнате. И это очень долгое и муторное дело.

Архив по размерам - как целый город, а устроен он совершенно нелепо. В нем работает всего один старый больной хромой подслеповатый библиотекарь. По сложным историческим причинам добавить к нему коллег или заменить его невозможно. Когда он получает запрос на выдачу или папку на хранение, он долгие дни и недели идет черепашьим шагом по всему гигантскому архиву, пока ему не попадется нужная полка. В итоге получить папку из архива занимает примерно 4 месяца (!) - а вы тем временем делайте что хотите. Неудивительно, что вы и все ваши коллеги стремитесь как можно больше папок иметь при себе на столе или даже в комнате.

В последние годы, чтобы как-то улучшить скорость работы бюрократов, придумали несколько нововведений.

Во-первых, наряду с старым огромным архивом сделали новый, современный. Он не такой огромный, размером скорее с квартал, а не с город, и в нем работает целый отряд библиотекарей. Но он все равно далеко, сообщение с ним медленное, поиск в нем тоже не такой быстрый, как хотелось... короче, получить папку можно уже не за 4 месяца, а за день-полтора. И на том спасибо.

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

И наконец, недавно даже и это улучшили. Начальство догадалось посадить в каждую комнату стажеров, которые с бумагами не умеют еще пока работать, но могут найти в шкафу, что нужно. Теперь, когда вам нужна бумага из чужого кабинета, вы говорите своему стажеру, он звонит туда и говорит с тамошним стажером, и они организовывают пересылку всего содержимого папки по факсу. Вашим коллегам даже отвлекаться не надо. Папка у вас на столе через 30-40 минут. Еще быстрее работа пошла.

----------------------------------

Этот рассказ написан для того, чтобы показать на наглядном примере, как устроена работа с данными в современных компьютерах.

Вы, бюрократ, работающий с бумагами - на самом деле центральный процессор компьютера, или, если точнее, одно ядро процессора. Все временные задержки увеличены ровно в миллиард раз - вместо "секунда" следует понимать "наносекунда" и так далее.

Чтение папки, которая у вас в руках - это работа с данными, которые уже лежат в регистрах процессора. Найти папку на столе - это прочитать данные из процессорного кэша (неважно какого, L1/L2/L3 - 10 секунд это усредненные данные). Канцелярские шкафы в вашей комнате, найти папку в которых занимает минута - это рабочая память, RAM.

Архив с полуслепым инвалидом, который 4 месяца ищет вашу папку - это жесткий диск. Новый современный архив, из которого папка приходит за день-полтора - диски SSD.

Телефонная связь вместе с факсом - это быстрая локальная сеть. Переслать папку по факсу - прочитать данные из памяти другого компьютера, который расположен на одной локальной сети с вами. Наконец, стажеры - это технология RDMA, позволяющая читать через сеть память другого компьютера напрямую, не отвлекая тамошний процессор.

----------------------------------

Основные идеи, которые должен продемонстрировать этот рассказ - это насколько быстрее иметь нужные данные в рабочей памяти, чем читать их с диска; а если все же их нет в памяти, то насколько быстрее читать их SSD, чем с HD, и насколько через локальную сеть, чем с любого диска, даже SSD.

Идея не моя - я позаимствовал ее и немного развил из записи в блоге Адриана Кольера. Кстати, один из лучших блогов на свете для интересующихся компьютерными науками.
Tags: программирование
Subscribe
  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 58 comments
Previous
← Ctrl ← Alt
Next
Ctrl → Alt →
Previous
← Ctrl ← Alt
Next
Ctrl → Alt →