Представьте: вы купили огромный, дорогой грузовик (мощный сервер с 24 ядрами), ожидая, что он перевезет гору груза в разы быстрее, чем ваш старый легковой автомобиль (ноутбук). Но на деле оказывается, что грузовик еле ползет и справляется с задачей хуже легковушки.
Именно с такой загадкой столкнулся программист, создававший инструмент для тестирования баз данных.
В чем была загадка?
На обычном домашнем ноутбуке программа работала идеально. Но как только её запускали на профессиональном сервере, скорость резко падала. Казалось бы, чем больше «голов» (ядер процессора) у компьютера, тем быстрее он должен думать. Но здесь всё было наоборот: ядра мешали друг другу.
Кто оказался «преступником»?
Виновником оказалась всего одна строчка кода, связанная с так называемым Arc (умным счетчиком ссылок).
Представьте, что у вас есть одна книга (данные), которую читают сразу 24 человека. Чтобы книга не пропала, каждый раз, когда кто-то её берет или кладет на место, он должен поставить отметку в специальном журнале.
Когда читателей мало (как на ноутбуке), проблем нет.
Но когда 24 человека одновременно пытаются выхватить этот журнал, чтобы поставить свою отметку, возникает давка. Вместо того чтобы читать, люди стоят в очереди к журналу.
В компьютере это называется «конфликт кэша». Ядра процессора постоянно переспрашивали друг друга: «А ты уже поменял число в журнале? А ты?». На эти пустые разговоры уходило больше времени, чем на саму работу.
Как починили «грузовик»?
Решение оказалось простым и изящным. Вместо того чтобы заставлять всех пользоваться одним журналом, программист просто выдал каждому ядру по своей копии книги и своего журнала.
Расход памяти немного вырос (теперь у нас 24 книги вместо одной), но зато давка исчезла мгновенно!
Результат: После этого изменения сервер наконец-то заработал на полную мощь, обгоняя ноутбук в разы, как и положено дорогому оборудованию.
Мораль истории: В мире больших компьютеров иногда «делиться» — это плохо. Чтобы работать быстро, иногда нужно просто дать каждому участнику процесса свой набор инструментов и не заставлять их толкаться в очереди. 😊
А вы сталкивались с тем, что новая и мощная техника работает хуже старой? Расскажите свои истории в комментариях! 👇