При программировании сокетов вы создаете прослушивающий сокет, а затем для каждого подключающегося клиента вы получаете обычный потоковый сокет, который можно использовать для обработки запроса клиента. ОС незаметно управляет очередью входящих подключений.
Два процесса не могут одновременно подключаться к одному и тому же порту - в любом случае по умолчанию.
Мне интересно, есть ли способ (в любой известной ОС, особенно в Windows) запустить несколько экземпляров процесса, чтобы все они были привязаны к сокету и таким образом эффективно разделяли очередь. Тогда каждый экземпляр процесса может быть однопоточным; он просто блокируется при принятии нового соединения. Когда клиент подключился, один из экземпляров незанятого процесса примет этого клиента.
Это позволило бы каждому процессу иметь очень простую однопоточную реализацию, ничего не разделяя, кроме как через явную общую память, и пользователь мог бы регулировать пропускную способность обработки, запустив больше экземпляров.
Есть ли такая функция?
Изменить: для тех, кто спрашивает «Почему бы не использовать потоки?» Очевидно, потоки - это вариант. Но с несколькими потоками в одном процессе все объекты являются совместно используемыми, и необходимо проявлять большую осторожность, чтобы гарантировать, что объекты либо не являются общими, либо видны только одному потоку за раз, либо являются абсолютно неизменяемыми, и большинство популярных языков и средам выполнения не хватает встроенной поддержки для управления этой сложностью.
Запустив несколько идентичных рабочих процессов, вы получите параллельную систему, в которой по умолчанию не используется совместное использование, что значительно упрощает создание правильной и масштабируемой реализации.