Я работаю над клиент-серверным приложением UDP, где один сервер должен обрабатывать 40 клиентов, и все они могут быть зарегистрированы одновременно.
Теперь в UNIX такие проблемы решаются с помощью fork
функция, которая в основном создает дочерний процесс для работы с клиентом и оставляет сервер для принятия новых соединений.
Я искал в интернете и обнаружил, что fork
однако недоступен в Windows CreateProcess
может быть использован.
Мои предыдущие исследования также познакомили меня с пулами потоков. Итак, теперь у меня есть два вопроса:
fork()
используя CreateProcess()
в винде?В 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.