`
jimmee
  • 浏览: 548742 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Java NIO 异步网络构建高性能服务器(一)(原创)

    博客分类:
  • J2SE
阅读更多
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包里提供了各种优秀的线程池的实现方式.可以直接使用,不是高手就不要乱重新发明轮子了,线程不是一般人玩的.
分享到:
评论
6 楼 it_洗净童心 2013-10-01  
谢谢博主,虽然已经是很久以前的文字了,但是看到了还是可以引发自己很多思考,而且由浅入深的来说问题就是我们正常的思考过程,这也是外文书常用的讲解方式,总之多谢博主了
5 楼 fgfd0 2010-10-11  
说一些无聊的东西,根NIO没关的东西.
4 楼 oldrat 2010-09-09  
文中没有提到包java.nio的内容,都是Block IO的内容。怎么标题有“Java NIO 异步”,是不是出错了。
3 楼 jimmee 2010-07-22  
平时都在工作,等我周末有空写后面的.
2 楼 yangguo 2010-07-14  
只是文不对题,NIO的影子都没有。(二)在哪里。
1 楼 yangguo 2010-07-14  
代码写得比较牛

相关推荐

    高手使用Java NIO编写高性能的服务器

    总结来说,Java NIO通过引入非阻塞I/O和选择器,优化了服务器的并发处理能力,使得Java在构建高性能网络服务时有了更强的竞争力。理解并熟练运用NIO,对于提升Java应用的性能和可扩展性至关重要。通过合理设计和使用...

    JAVA NIO 异步通信模板服务端

    JAVA NIO(New IO)是Java 1.4版本引入的一个新特性,它为Java提供了非阻塞I/O操作的能力,极大地提升了Java处理I/O的...在实际开发中,这样的模板可以作为基础,根据具体需求进行扩展和优化,构建高性能的网络服务。

    JAVA nio异步长连接服务端与客户端

    Java NIO(New IO)是Java 1.4版本引入的一个新特性,它提供了一种新的I/O操作方式,与传统的BIO(Blocking IO)模型相比,NIO具有更高的并发性能,尤其在处理大量连接请求时更为明显。NIO的核心在于非阻塞I/O,即在...

    java nio 异步编程源码

    Java NIO(非阻塞I/O)和AIO(异步I/O)是Java平台中用于提高I/O性能的重要技术。在传统的Java BIO(阻塞I/O)模型中,一个线程对应一个连接,当服务器处理大量并发连接时,线程资源消耗大,效率较低。而NIO和AIO则...

    java nio服务器

    Java NIO(New Input/Output)是Java标准库中提供的一种I/O模型,与传统的 Blocking I/O(BIO)相比,...总的来说,Java NIO是现代Java服务器开发中不可或缺的一部分,它为高性能、高并发的网络应用提供了强大的支持。

    java NIO.zip

    Java NIO,全称为Non-Blocking Input/Output(非阻塞输入/输出),是Java标准库提供的一种替代传统的I/O模型的新技术。自Java 1.4版本引入NIO后,它为Java...通过合理利用NIO的特性,可以构建出高性能、低延迟的系统。

    Java NIO英文高清原版

    Netty是一个基于NIO的高性能、异步事件驱动的网络应用框架,它简化了网络编程,广泛应用于服务器端应用开发。 NIO的核心概念包括通道(Channel)、缓冲区(Buffer)和选择器(Selector)。以下是对这些核心概念的...

    Netty与Java NIO核心技术:异步网络应用框架及高性能IO实现

    Netty是一个专注于高性能、可靠的网络应用开发的异步事件驱动框架。文章首先深入浅出解释了Linux环境下的各种IO模型,包括但不限于阻塞、非阻塞、多路复用(select/poll/epoll)、信号驱动、异步IO的特点及其优劣...

    Java NIO测试示例

    在实际应用中,Java NIO通常用于高性能的服务器编程,例如在开发聊天服务器、Web服务器或游戏服务器时,可以利用其高效的并发处理能力。然而,NIO的API相对复杂,学习曲线较陡峭,需要花费一定时间去理解和实践。...

    JavaNIO服务器实例Java开发Java经验技巧共6页

    - **Netty框架**:Netty是一个基于NIO的异步事件驱动的网络应用程序框架,常用于高性能的服务器和客户端应用。 - **Tomcat服务器**:Tomcat服务器的部分部分也利用了Java NIO来提高其处理能力。 以上内容只是对...

    基于Java NIO的网络服务器Netty生产实例.zip

    Netty是一个高性能、异步事件驱动的网络应用框架,它极大地简化了基于Java NIO进行网络编程的复杂性。在“基于Java NIO的网络服务器Netty生产实例.zip”压缩包中,可能包含了关于如何使用Netty构建实际生产环境中的...

    java-nio.rar_NIO_java nio

    Java NIO,全称为New Input/Output,是Java在1.4...理解并熟练运用这些知识点,对于构建高性能的Java服务器端应用至关重要。通过阅读"java-nio.pdf"这份文档,你将能够深入学习Java NIO技术及其在异步连接池中的应用。

    《Java NIO》Download Url

    通过学习《Java NIO》,开发者可以掌握如何构建高性能、低延迟的网络应用,特别是在处理大数据、分布式系统和高并发场景时,NIO的优势尤为突出。配合Java的并发工具和设计模式,可以编写出更加健壮和高效的服务器端...

    JAVA NIO 简单PFT 文件服务

    JAVA NIO(New IO)是Java 1.4版本引入的一种新的IO API,用来替代标准的Java IO API。NIO提供了非阻塞I/O操作,使得处理大量并发...通过深入理解和熟练运用这些概念,开发者可以构建出高性能、高并发的文件服务系统。

    java异步server

    总的来说,Java异步服务器技术是构建高并发、低延迟网络服务的关键,尤其适用于需要处理大量并发连接的场景,如聊天服务器、游戏服务器等。通过NIO或AIO,开发者可以构建出高效且可扩展的网络应用。

    NIO学习系列:连网和异步IO

    在IT行业中,网络编程是构建分布式系统和网络应用的基础,而Java NIO(Non-blocking Input/Output)则是Java提供的一种高效、低延迟的I/O模型。本篇文章将深入探讨NIO在连网和异步IO方面的应用,以及如何通过源码...

    mina高性能Java网络框架 v2.1.3

    Apache MINA(Multipurpose Infrastructure for Network Applications) 是Apache组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架。当前发行的MINA版本支持基于Java NIO技术的TCP/...

    基于java NIO的http代理,支持https.zip

    Java NIO(New IO)是Java 1.4版本引入的一个新特性,它为Java应用程序提供了非阻塞I/O操作的能力,与传统的IO模型(基于流的IO)相比,NIO具有更高的性能和更好的可扩展性。在本项目中,“基于java NIO的http代理,...

Global site tag (gtag.js) - Google Analytics