欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

java高并发服务器议论

更新时间: 2014-01-05 01:58:55 责任编辑: Author_N1

 

JAVA高并发服务器讨论
开发WEB, Buffer几乎必不可少.
但假如采用自增加长度的Buffer, 单纯写4MB的数据, 都要350ms的时间, 效率这么低. 
从SOCKET下来的数据, 先是写到Buffer, 然后处理完成后, 再把结果写入Buffer, 然后用SOCKET发送出去.
在这一来一回的过程当中, 存在两次缓冲写入和读取, 就算不计算读出的时间, 单纯流入流出4MB, 就花掉700ms了, 那么1秒内, 只剩下300ms是业务处理的时间, 这么低的效率, 怎样提高并发量啊...

各位写高效WEB时, 都使用什么方法增加数据流量的?
--参考方法--
帮顶下~~~
--参考方法--
这个350ms的时间,是怎么来的,需要看看瓶颈在哪里,是硬盘IO还是网络IO。
--参考方法--
高并发你不能用java自带的socket,自带的socket是阻塞式的,效率低。无法满足WEB类型的高请求服务。必须用非阻塞式TCP/IP通信模式
--参考方法--
俺搞c的,没了解过java的ByteArrayOutputStream 是怎么实现的,估计问题在这里。
它的底层实现估计每次都会进行一些诸如strlen或者memset之类的操作,导致对大缓存的性能下降。
可以:
1、看看源码是否有类似的问题
2、搞一个小一点的buffer,加一层循环,比如4K的buffer,再加一个1K的外层循环试试看
如果有问题,可能要考虑换封包的方式,或者换buffer类了
纯属猜测,仅供参考

话说你这么大的缓冲,用来做什么?瞬间发这么大流量,网卡还不被你撑死,1秒时间700ms网卡都空闲的,有点浪费了,最好能均匀使用网卡:)
--参考方法--
我的笔记本CPU是T8300,运行代码用了170-200ms

先定义 byte[] buf11 = "测试字符串1号".getBytes();再写buf11 ,执行时间是60-70ms
 

循环中做getBytes()转换,开销相当很高
--参考方法--
@dfasri:
我了解你的意图。不过还是要说明,问题可能出在我说的那个地方。建议你测试一下,确定是不是这个问题。

我说的第2种方式,可能没讲清楚,就是希望能通过减小缓冲的方式加快速度,原因如下:
java用什么buffer不太清楚,C里面对char数组的不同使用方法也会导致效率出现严重的区别。
比如用strncpy来拼接字符串,在目标buffer很大时,效率会急剧下降,原因是这个函数对buffer的未使用部分循环做了fill 0。

--参考方法--
帮顶下
--参考方法--
jvm  currentTimeMillis是不准的 好像最小感知时间是15ms左右  纳秒感知时间是800ns左右空转试试就知道 “4M的写入要花掉上百毫秒” 这个明显有问题 硬盘的响应速度也不止这样吧 

抛开这些不说 如果在意响应速度多加些线程就就可可以了吧
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 01:58:55
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/4039/
本文WWW.DOC100.NET DOC100.NET版权所有。