java nio 业务接收多线程处理是否必要

nio在服务器收到客户端请求的时候,是单线程的,即使自己在后续的业务流程处理中使用了线程池操作,由于接收部分是单线程的,也没有什么意义?有何办法提高效率?

nio

2个回答

里面东西还没有看进去,不过我看到你和我写的不同的地方在于我主线程收到事件之后就交给read线程池去处理,业务处理完毕交由write线程池处理,这个是个单线程操作。你的做法是:主线程启动注册accept事件,如果有客户上来,交由线程组readWriteMonitors处理,这样就不是单线程了,可是这样会不会有一个问题,就是线程安全问题?一次客户请求,服务器多次事件处理,不知道你有没有考虑过?

你所顾虑的问题是不存在的哈,一个连接 他的读写监听 只能注册 于某个readWriteMonitors线程上,你看下有专门的调度线程。测试过的,你担心的问题不存在,你自己读下代码。

连接的读写监听放在一个线程中,数据的读取,协议解码,业务处理 和 编码 功能 都交给线程池中的线程来做,这样保证最大的并行处理。你可以参考开源WebSocket服务器CshBBrain的网络传输层的实现 http://cshbbrain.iteye.com/blog/1691718(详细介绍了架构,这里有你关注的东西。)http://cshbbrain.iteye.com/blog/1685217

smallbee12345
smallbee12345 里面东西还没有看进去,不过我看到你和我写的不同的地方在于我主线程收到事件之后就交给read线程池去处理,业务处理完毕交由write线程池处理,这个是个单线程操作。你的做法是:主线程启动注册accept事件,如果有客户上来,交由线程组readWriteMonitors处理,这样就不是单线程了,可是这样会不会有一个问题,就是线程安全问题?一次客户请求,服务器多次事件处理,不知道你有没有考虑过?
接近 8 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问