CreateProcess() в клиент-серверном приложении в windows

Я работаю над клиент-серверным приложением UDP, где один сервер должен обрабатывать 40 клиентов, и все они могут быть зарегистрированы одновременно.

Теперь в UNIX такие проблемы решаются с помощью fork функция, которая в основном создает дочерний процесс для взаимодействия с клиентом и оставляет сервер для принятия новых соединений.

Я искал в интернете и обнаружил, что fork однако недоступен в Windows CreateProcess может быть использован.

Мои предыдущие исследования также познакомили меня с пулами потоков. Итак, теперь у меня есть два вопроса:

  1. Могу ли я достичь функциональности fork() используя CreateProcess() в винде?
  2. Если это возможно, что я должен пойти: пулы потоков или создание нескольких процессов?

2 ответа

В linux функция fork используется для создания нового процесса. Также для каждого процесса существует разное пространство виртуальной памяти. Для потоков существует только одна общая виртуальная память. Кроме того, API-интерфейс fork может имитировать в Windows (до некоторой степени) с помощью встроенного API RtlCloneUserProcess.

1. Короткий ответ - нет, ничего подобного fork() в Win32 API, но это должно быть возможно реализовать, так как CygWin предоставляет полнофункциональный fork() в Windows. Но вам, похоже, на самом деле не нужно fork()для вашего приложения.

2. На самом деле ваши варианты:

  • Создайте хотя бы один поток / процесс для каждого клиента / соединения
  • Создайте только один поток / процесс для всех клиентов / соединений (используя в качестве примера управляемый событиями подход)
  • Смешайте два выше

Лучший подход зависит от вашего приложения, но для обработки максимум 40 одновременных клиентов у вас вполне может быть один поток для каждого клиента.

Вы можете использовать стандартную библиотеку потоков POSIX pthread создавать и управлять потоками. Эта библиотека является стандартной во всех POSIX-совместимых ОС (GNU/Linux, Mac OS X, BSD и т. Д.) И была портирована на Windows. Таким образом, этот подход позволит вам иметь очень хорошую переносимость.

Хотя, если вы хотите использовать Win32 API, вам стоит взглянуть на CreateThread.

Другие вопросы по тегам