1.问题
构建高性能的服务器时,肯定要求性能越高越好,这是不言自明的道理.那么一般服务器处理客户端请求,都有哪些方式呢?
(1) 最初级的处理方式:用一个ServerSocket进行无限循环来监听,客户端来一个连接就处理一个,后面来的连接则只能等待前面的处理好了才能进行处理,可想而知,如果每个连接处理的处理时间很长,这样的处理在一个客户要求快的响应的情况下会多么糟糕.大家都经常上网,你愿意多等那么10几秒么? 这种情况的代码形式如下:
ServerSockt serverSocket = ....
while (true) {
Socket socket = serverSocket.accept();
// 处理socket...
}
所以说,很多讲网络编程的书,动不动举的例子就是上面,我真的怀疑这些人做过实际开发没有.在实际应用过程中,很少会使用这种编程开发方式的.
(2) 稍微进步一些的:一客户端一个线程.这中处理的方式是,当来一个客户端时,就新创建一个线程进行处理.代码的方式如下:
ServerSockt serverSocket = ....
while (true) {
Socket socket = serverSocket.accept();
(new Thead() {
public void run() {
// 处理socket
}
}) .start();
}
// 注意; 我上面敲的代码仅仅是表达意思,如何编写正确的方式,我想就不用多说了把.
可能刚接触这种处理方式的人会觉得,这样真好阿!每个客户端连接都用一个线程来处理,应该性能很高,响应性很好吧.如果连接数非常少的话,上面这种处理方法的确没多大问题.但是,但凡学过操作系统的人都知道,现代操作系统进程是资源分配的基本单位,而进程是调度的基本单位.要知道,调度是需要花费CPU时间的,如果线程数过多,CPU的时间都花费在调度上了,真正用于处理连接的时间则很少,当然,这仅仅是一个方面,线程的创建的会花费时间和一定的内存,这有可能会造成内存耗尽的情况并会影响响应性,而且线程的频繁切换会不能有效的利用高速缓存等等情况.因此,实际工作过程中,很少用这种“一客户端一线程”的方式.
(3)使用线程池。上面已经一客户端一线程的情况下,线程过多时会造成的影响.自然而然的,大家就想到了使用线程池.所谓的线程池处理方法,就是预先创建好一组线程,每个线程都在监听着客户端连接,哪个先监听到连接了,就进行处理.一般代码形式如下:
ServerSocket serverSocket = ….
for ( int i = 0; i < threadNum; i ++) {
Thread t = new Thread() {
public void run() {
while (true) {
Socket clientSocket = serverSocket.accept();
// 处理clientSocket
}
}
};
t.start();
}
使用线程池,线程的是先预先创建的,与客户端数量无关,因此,可以控制线程的调度和相关的资源开销.Doug Lea教授为java贡献的java.util.concurrent包里提供了各种优秀的线程池的实现方式.可以直接使用,不是高手就不要乱重新发明轮子了,线程不是一般人玩的.
分享到:
相关推荐
总结来说,Java NIO通过引入非阻塞I/O和选择器,优化了服务器的并发处理能力,使得Java在构建高性能网络服务时有了更强的竞争力。理解并熟练运用NIO,对于提升Java应用的性能和可扩展性至关重要。通过合理设计和使用...
JAVA NIO(New IO)是Java 1.4版本引入的一个新特性,它为Java提供了非阻塞I/O操作的能力,极大地提升了Java处理I/O的...在实际开发中,这样的模板可以作为基础,根据具体需求进行扩展和优化,构建高性能的网络服务。
Java NIO(New IO)是Java 1.4版本引入的一个新特性,它提供了一种新的I/O操作方式,与传统的BIO(Blocking IO)模型相比,NIO具有更高的并发性能,尤其在处理大量连接请求时更为明显。NIO的核心在于非阻塞I/O,即在...
Java NIO(非阻塞I/O)和AIO(异步I/O)是Java平台中用于提高I/O性能的重要技术。在传统的Java BIO(阻塞I/O)模型中,一个线程对应一个连接,当服务器处理大量并发连接时,线程资源消耗大,效率较低。而NIO和AIO则...
Java NIO(New Input/Output)是Java标准库中提供的一种I/O模型,与传统的 Blocking I/O(BIO)相比,...总的来说,Java NIO是现代Java服务器开发中不可或缺的一部分,它为高性能、高并发的网络应用提供了强大的支持。
Java NIO,全称为Non-Blocking Input/Output(非阻塞输入/输出),是Java标准库提供的一种替代传统的I/O模型的新技术。自Java 1.4版本引入NIO后,它为Java...通过合理利用NIO的特性,可以构建出高性能、低延迟的系统。
Netty是一个基于NIO的高性能、异步事件驱动的网络应用框架,它简化了网络编程,广泛应用于服务器端应用开发。 NIO的核心概念包括通道(Channel)、缓冲区(Buffer)和选择器(Selector)。以下是对这些核心概念的...
Netty是一个专注于高性能、可靠的网络应用开发的异步事件驱动框架。文章首先深入浅出解释了Linux环境下的各种IO模型,包括但不限于阻塞、非阻塞、多路复用(select/poll/epoll)、信号驱动、异步IO的特点及其优劣...
在实际应用中,Java NIO通常用于高性能的服务器编程,例如在开发聊天服务器、Web服务器或游戏服务器时,可以利用其高效的并发处理能力。然而,NIO的API相对复杂,学习曲线较陡峭,需要花费一定时间去理解和实践。...
- **Netty框架**:Netty是一个基于NIO的异步事件驱动的网络应用程序框架,常用于高性能的服务器和客户端应用。 - **Tomcat服务器**:Tomcat服务器的部分部分也利用了Java NIO来提高其处理能力。 以上内容只是对...
Netty是一个高性能、异步事件驱动的网络应用框架,它极大地简化了基于Java NIO进行网络编程的复杂性。在“基于Java NIO的网络服务器Netty生产实例.zip”压缩包中,可能包含了关于如何使用Netty构建实际生产环境中的...
Java NIO,全称为New Input/Output,是Java在1.4...理解并熟练运用这些知识点,对于构建高性能的Java服务器端应用至关重要。通过阅读"java-nio.pdf"这份文档,你将能够深入学习Java NIO技术及其在异步连接池中的应用。
通过学习《Java NIO》,开发者可以掌握如何构建高性能、低延迟的网络应用,特别是在处理大数据、分布式系统和高并发场景时,NIO的优势尤为突出。配合Java的并发工具和设计模式,可以编写出更加健壮和高效的服务器端...
JAVA NIO(New IO)是Java 1.4版本引入的一种新的IO API,用来替代标准的Java IO API。NIO提供了非阻塞I/O操作,使得处理大量并发...通过深入理解和熟练运用这些概念,开发者可以构建出高性能、高并发的文件服务系统。
总的来说,Java异步服务器技术是构建高并发、低延迟网络服务的关键,尤其适用于需要处理大量并发连接的场景,如聊天服务器、游戏服务器等。通过NIO或AIO,开发者可以构建出高效且可扩展的网络应用。
在IT行业中,网络编程是构建分布式系统和网络应用的基础,而Java NIO(Non-blocking Input/Output)则是Java提供的一种高效、低延迟的I/O模型。本篇文章将深入探讨NIO在连网和异步IO方面的应用,以及如何通过源码...
Apache MINA(Multipurpose Infrastructure for Network Applications) 是Apache组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架。当前发行的MINA版本支持基于Java NIO技术的TCP/...
Java NIO(New IO)是Java 1.4版本引入的一个新特性,它为Java应用程序提供了非阻塞I/O操作的能力,与传统的IO模型(基于流的IO)相比,NIO具有更高的性能和更好的可扩展性。在本项目中,“基于java NIO的http代理,...