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

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

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

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

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

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

0

Решение

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

0

Другие решения

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

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

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

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

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

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

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector