2012年12月23日

多任务处理:阻塞和超时

摘要: 阻塞和超时 Socket的I/O调用可能会因为多种原因而阻塞。数据输入方法read()和receive()在没有数据可读时会阻塞。TCP套接字的write()方法在没有足够的空间缓存传输的数据时可能阻塞。 ServerSocket 的accept()方法和Socket的构造函数都会阻塞等待... 阅读全文

posted @ 2012-12-23 09:49 吴一达 阅读(242) 评论(0) 推荐(0) 编辑

多任务处理:管理调度Executor 接口

摘要: 系统管理调度:Executor接口 在上一节中我们已经看到,将客户服务器协议的细节封装起来(如EchoProtocol.java),就可以通过同一个协议实现来使用不同的"调度"方法(如,TCPEchoServerThread.java和TCPEchoServerThreadPool.java... 阅读全文

posted @ 2012-12-23 09:47 吴一达 阅读(195) 评论(0) 推荐(0) 编辑

多任务处理:线程池

摘要: 线程池 每个新线程都会消耗系统资源:创建一个线程将占用CPU周期,而且每个线程都自己的数据结构(如,栈)也要消耗系统内存。另外,当一个线程阻塞(block)时,JVM将保存其状态,选择另外一个线程运行,并在上下文转换(context switch)时恢复阻塞线程的状态。随着线程数的增加,线... 阅读全文

posted @ 2012-12-23 09:44 吴一达 阅读(336) 评论(0) 推荐(0) 编辑

多任务处理:一客户一线程

摘要: 一客户一线程 在一客户一线程(thread-per-client)的服务器中,为每个连接都创建了一个新的线程来处理。服务器循环执行一些任务,在指定端口上侦听连接,反复接收客户端传入的连接请求,并为每个连接创建一个新的线程来对其进行处理。 TCPEchoServerThread.java实现... 阅读全文

posted @ 2012-12-23 09:42 吴一达 阅读(492) 评论(0) 推荐(0) 编辑

多任务处理:服务器协议

摘要: 服务器协议 既然我们将要介绍的多任务服务器方法与特定的客户端-服务器协议相互独立,我们希望能够实现一个同时满足两者的协议。EchoProtocol中给出了回显协议的代码。这个类的静态方法handleEchoClient()中封装了对每个客户端的处理过程。除添加了写日志功能(马上会对其介绍)外... 阅读全文

posted @ 2012-12-23 09:41 吴一达 阅读(211) 评论(0) 推荐(0) 编辑

多任务处理:多线程

摘要: 我们在前面所介绍的基本TCP响应服务器一次只能处理一个客户端的请求。当一个客户端向一个已经被其他客户端占用的服务器发送连接请求时,虽然其在连接建立后即可向服务器端发送数据,服务器端在处理完已有客户端的请求前,却不会对新的客户端作出响应,。这种类型的服务器称为"迭代服务器(iterative ... 阅读全文

posted @ 2012-12-23 09:39 吴一达 阅读(327) 评论(0) 推荐(0) 编辑

导航