Процессы медленнее, чем потоки - PullRequest
1 голос
/ 09 ноября 2011

Я только что написал вопрос о кэшировании , и это заставило меня задуматься.Использует ли серверный процесс со строгим API медленнее, чем статически связанная серверная библиотека (возможно, в своем собственном потоке)?

Если это медленнее, то какие накладные расходы существуют?Операционная система Linux, но большая часть моей разработки и тестирования на Windows.

Ответы [ 2 ]

2 голосов
/ 09 ноября 2011

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

Что касается накладных расходов, «это зависит», но ответ, скорее всего, «недостаточно, чтобы быть проблемой для вас». Как всегда, если вы сомневаетесь, единственное, что нужно сделать, - это попробовать оба способа и сравнить их с профилем.

1 голос
/ 09 ноября 2011

Это зависит.

Я не думаю, что переключение контекста действительно отличается в Linux между потоками и процессами. Тем не менее:

  • Запуск нового процесса (например, с помощью posix_spawn или fork / exec) выполняется медленнее, чем запуск нового потока, поскольку вам нужно загрузить новый образ процесса, который вызывает динамический компоновщик и выполняет другие действия

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

Процессы, которые "работают, но не работают", находятся где-то "между" процессами и потоками. Однако они сталкиваются со своими собственными проблемами (например, многие библиотеки путаются, если они совместно используют свои файловые дескрипторы с другим процессом).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...