|
Print this page
|
1.[
讨论]使用java nio的selector做一个数据查询主机
|
Copy to clipboard
|
||||||||
Posted by:
koji
Posted on: 2003-10-29 12:40 之前跟米花大大讨论过的东西,想说跟大家分享讨论一下 最底下有图 名字可能取的有点不太好 基本上我是为了学校的东西必须做p2p的集权式主机 负责管理节目表,p2p client都必须去跟这台主机要求数据 所以写这个程序测试 会使用selector的原因在于 不希望有太多thread产生,外加想试试看nio 所以我希望固定thread数去处理多个connection 当使用者要查询节目时,每个connection都只会做查询数据库的动作 遇到最大问题是 selector在等待connection发生动作时,是block住的 所以当他在等待的时候无法接受其它connection的regist 下面这是javadoc的说明 -- A thread blocked in one of the select() or select(long) methods may be interrupted by some other thread in one of three ways: * By invoking the selector's wakeup method, * By invoking the selector's close method, or * By invoking the blocked thread's interrupt method, in which case its interrupt status will be set and the selector's wakeup method will be invoked. -- 所以后来就跟米花兄请教 最后就使用queue去塞要regist的connection 底下是我的code 不知这种设计方式怎样 请多多指教~ ServerWindow
WorkerThread
ChannelQueue
WorkLine
|
2.Re:[
讨论]使用java nio的selector做一个数据查询主机
[Re: koji]
|
Copy to clipboard
|
Posted by:
linexpmail Posted on: 2003-10-29 15:13 推荐 NIO 的反应器样式,可以实作来比较看看: http://gee.cs.oswego.edu/dl/cpjslides/nio.pdf 分配责任清楚,过去实做过单执行绪版本,效能不错。 个人觉得反应器样式难在观察何时踩煞车,建议将 socketChannel.read (buffer) > 0 抽出实作 boolean inputIsComplete() { /* ... */ } 会比较清楚 责任所在。 实际上不同平台底层实作不同,有的环境会传回读取到 0 byte 的情形,抽出个 method 也好观察测试。 实做测试发现效能瓶颈是 CharsetDecoder,改成直接读 byte 会让你的反应器更猛。除非瓶颈已到,建议还是先实作单执行绪, 让反应器好好跑一跑看看。 |
3.Re:[
讨论]使用java nio的selector做一个数据查询主机
[Re: koji]
|
Copy to clipboard
|
Posted by:
koji Posted on: 2003-10-30 13:49 hmm 因为我是预设希望有几百个到千个联机 会去使用主机搜寻节目表 所以用单执行绪怕会让反应时间过长 多执行绪的话想说可以稍微平均一下反应时间 CharsetDecoder自己没测试过效能,感谢 用boolean inputIsComplete() { /* ... */ }会比较清楚 但是就像你给的pdf一样会变成我要把处理数据整个拉出来做对巴 下次改版看看 koji |