【发布时间】:2010-10-14 19:52:32
【问题描述】:
在套接字编程中,您创建一个侦听套接字,然后对于每个连接的客户端,您将获得一个普通的流套接字,您可以使用它来处理客户端的请求。操作系统在后台管理传入连接的队列。
两个进程不能同时绑定到同一个端口 - 默认情况下,无论如何。
我想知道是否有办法(在任何著名的操作系统上,尤其是 Windows 上)启动进程的多个实例,以便它们都绑定到套接字,从而有效地共享队列。然后每个流程实例都可以是单线程的;它只会在接受新连接时阻塞。当客户端连接时,其中一个空闲进程实例将接受该客户端。
这将允许每个进程都有一个非常简单的单线程实现,除非通过显式共享内存,否则不会共享任何内容,并且用户将能够通过启动更多实例来调整处理带宽。
有这样的功能吗?
编辑:对于那些询问“为什么不使用线程?”的人显然线程是一种选择。但是在一个进程中有多个线程,所有对象都是可共享的,必须非常小心地确保对象不是共享的,或者一次只能对一个线程可见,或者是绝对不可变的,并且大多数流行的语言和运行时缺乏管理这种复杂性的内置支持。
通过启动少量相同的工作进程,您将获得一个并发系统,其中 默认 是不共享的,从而更容易构建正确且可扩展的实现。
【问题讨论】:
-
我同意,多个流程可以更轻松地创建正确且健壮的实现。可扩展,我不确定,这取决于您的问题域。
标签: sockets concurrency