我正在阅读Java中的TCP / IP套接字,关于serversocket,它说
当我们在那个ServerSocket上调用accept()时 例如,如果新连接处于挂起状态,则accept()立即返回;否则就会阻止 直到连接进入或计时器到期,以先到者为准。这允许 一个线程来处理多个连接。不幸的是,方法需要这样做 我们不断轮询所有I / O来源,这种“忙碌等待”的方法再次引入 骑自行车通过连接的很多开销只是为了发现他们有 无事可做。
根据我的理解,这应该通知""当一个连接到来时,不应该“等待”#34 ;?我误解了什么......?
----------------- 修改 ----------------------
整段如下:
由于这些复杂性,一些程序员喜欢坚持使用单线程 方法,其中服务器只有一个线程,它处理所有客户端 - 而不是顺序, 但是一下子。这样的服务器不能阻止任何I / O操作 一个客户端,必须专门使用非阻塞I / O.回想一下,对于非阻塞I / O,我们指定对I / O方法的调用可能阻塞的最大时间量(包括零)。 我们在第4章看到了一个例子,我们在accept操作上设置了一个超时 (通过ServerSocket的setSoTimeout()方法)。当我们在那个ServerSocket上调用accept()时 例如,如果新连接处于挂起状态,则accept()立即返回;否则就会阻止 直到连接进入或计时器到期,以先到者为准。这允许 一个线程来处理多个连接。不幸的是,这种方法需要 我们不断轮询所有I / O源,并再次引入那种“忙碌等待”的方法 骑自行车通过连接的很多开销只是为了发现他们有 无事可做
答案 0 :(得分:0)
即使在整个报价中,这也是无意义的。 要么你正在使用阻塞I / O,在这种情况下你需要每个连接一个线程,另一个每个accept()循环,或你正在使用非阻塞I / O,在这种情况下,您使用Java 7中的select(),或,您正在使用异步I / O,在这种情况下,它都是完成处理程序的回调。在这些情况下,您都不需要轮询或忙碌等待。
我认为他必须指的是使用非常短暂超时的阻止模式,但实际上最不清楚。