我正在为java中的基于移动设备的设备编写一个网络服务器。
这个网络服务器是单线程的,遵循nginx,node.js和类似的背后的想法:不产生多个线程只是在事件循环中使用异步操作。
虽然使用多线程网络服务器可能会在x86最近的cpu上提供更好的性能,但基于arm的单核cpu将需要做更多的工作。
为了澄清,我非常清楚C和我在C#中实现普通c或多线程的单线程web服务器,利用Windows上的IOPS,但我在java中只编写了一个简单的web服务器,想要替换这个新的。
现在,我正在使用java nio并且我已经知道ByteBuffer在转换为字符串时非常慢但是这不是问题,因为我不需要这样做,事实上我想要的gaix maximium表演在字节级实现解析和比较。
我的问题是,解析字节缓冲区的方法更快?
我已经看到ByteBuffer支持get方法,它允许访问单个字节并向前移动光标,支持数组方法,返回后备数组,所以我的问题是哪种方法更快?
我可以直接在支持的数组上工作,或者我应该避免使用get?
我想实现一个ByteBufferPool来重用bytebuffer,我会让线程知道它,在下面阅读,这可能是一个问题吗?
在某些情况下,我会比较字节到字节,应用掩码来处理区分大小写(我的意思是,如果第一个字节是G,第三个是T,第四个是空格(0x47,0x54和0x20)我可以将请求作为GET进行处理)在其他情况下我需要将字符串与字节数组进行比较,比如标题(我将循环遍历字符串字符,将它们转换为字节并与字节进行比较)。
抱歉这些愚蠢的问题,但我不知道java规格,不知道内部java的东西,所以我需要信息:)
有人可以提示吗? :)
PS:很明显,并非所有操作都可以以do-stuff-pause-continue-return方式处理,所以我将实现一个ThreadPool以避免线程创建损失
答案 0 :(得分:1)
试试Netty。 您可以控制线程模型,您可以实现所需的功能。