没研究不过百度到一个
http://gflei.iteye.com/blog/709355
一记坐等学习了。

解决方案 »

  1.   

    一个Java程序线程数如果不够,就启动两个好了。为啥要纠结单个应用的线程数量这个问题?即便从系统总体可用性来说,你也应该使用集群机制来消除单点故障。另外,这么大规模的TCP长连接,应该采用NIO技术,1条线程负责看管10~100个连接好了。
      

  2.   

    目前是3W左右,和10W比起来,差距挺远。LZ研究一下Apache MINA 2 一个高并发网络框架.支持 TCP/IP、UDP/IP等传输方式。
    http://mina.apache.org/performance-test-reports.html
      

  3.   

    并没有说要纠结一个应用啊。
    一台单板要支持10万用户,一个应用支持5万,一台单板部署2个应用。
    这是需求没有办法改变,客户提供单板机,如果不把性能发挥,这太浪费资源,哪个客户愿意干啊。这并不是NIO与IO的问题。我们是做的一个与第三方连接的IM(GTalk,MSN)。业务需要1个用户至少使用2个线程。一个线程等待接收第三方IM的数据,另外一个线程发送数据。
      

  4.   


    从你的回复来看,你可能不太理解NIO机制,NIO是支持长连接的;主要原理是基于事件机制,采用非阻塞技术;所以不会因为read或write导致线程因为需要等待数据而阻塞。你可以用一个线程负责10个用户的数据接收,负责另外10个用户的数据发送。当然也可以用一个线程同时负责5个用户的数据接收和发送。
    另外也请你放心的是,NIO并非Java原创,它早就广泛应用于各种操作系统。
    大并发系统基本上没有不采用非阻塞IO机制的。
      

  5.   

    用java NIO来做吧,推荐mina
    用线程池来处理业务,有人曾经在单台机器上实现了512k个Socket长链接对于业务模型来说,如果使用Socket,每个用户也就是占用1个链接。按512k个链接算的话,可以支持50万人同时连到同一台服务器上。对于每个用户而言,大部分时间cpu都是空闲的,根本不需要为每个用户开线程,更不可能给每个用户开2个线程。线程也不是越多越好,一般来讲,线程数和CPU数成正比, 最好不超过10×CPU个数。
      

  6.   

    从你的回复来看,你可能不太理解NIO机制,NIO是支持长连接的;主要原理是基于事件机制,采用非阻塞技术;所以不会因为read或write导致线程因为需要等待数据而阻塞。你可以用一个线程负责10个用户的数据接收,负责另外10个用户的数据发送。当然也可以用一个线程同时负责5个用户的数据接收和发送。
    另外也请你放心的是,NIO并非Java原创,它早就广泛应用于各种操作系统。
    大并发系统基本上没有不采用非阻塞IO机制的。