ObDisclaimer: единственный верный ответ на вопросы производительности - это написать, запустить и измерить эталонный тест.
ObDisclaimer 2: на современном оборудовании не думайте о производительности, если у вас нет абсолютно никакой причины,Люди постоянно работают с рабочими нагрузками промышленного уровня, написанными на интерпретируемых языках, на виртуальных машинах на оборудовании с общей арендой, и они не замечают, что он на 100-200 раз медленнее, чем оптимизированный C на голом металле.
Для рабочей нагрузки, которую вы описываете, где она привязана к вычислениям, а набор данных находится в памяти, я ожидаю, что общая производительность будет примерно одинаковой для чистого металла, Docker и виртуальной машины.
Попытки DockerТрудно быть довольно легким, и в значительной степени полагается на поддержку уровня ядра для своей магии.Если вы выполняете файловый ввод / вывод, в ядре будет еще один уровень косвенного обращения;если вы выполняете сетевой ввод / вывод, Docker вводит уровень NAT.(Когда вы говорите «read /foo/bar
в Docker, ядро делает некоторую внутреннюю косвенность, говоря:« о, вы имеете в виду этот файл вместо /var/lib/docker
».) Если вы можете измерить эту разницу, и она действительно имеет значение для вас, тогда вам нужно запустить приложение на голом железе, вероятно, вы получите больший выигрыш в коде приложения.
Виртуальные машины должны симулировать все «аппаратное обеспечение», которое может замедлять их работуособенно для связанных с диском рабочих нагрузок. Если вы выполняете файловый или сетевой ввод-вывод, это будет выглядеть как настоящая запись на диск, но затем это дисковое устройство моделируется программным обеспечением. Опять же, было проделано много работы для оптимизацииЗа последние десятилетия уровень кэширования на уровне приложений может значительно улучшить ситуацию (даже на голом железе, где диск и сеть являются самыми медленными частями системы).
В любом случае,чистый алгоритмический код выполняется непосредственно на процессоре, и память управляет (гарантируя, что память вашего процесса / виртуальной машины не может достичь другого процесса/ VM) реализованы аппаратно.