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