- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
高吞吐量系统设计优化建议Java开发Java经验技巧.doc
高吞吐量系统设计优化建议-编程开发技术
高吞吐量系统设计优化建议
原文出处:IBM?周明耀
高吞吐量系统
举一个例子,我们做项目需要安排计划,每一个模块可以由多人同时并行做多项 任务,也可以一个人或者多个人串行工作,但始终会有一条关键路径,这条路径 就是项目的工期。系统一次调用的响应吋间跟项目计划一样,也有一条关键路径, 这个关键路径是就是系统影响时间。关键路径由CPU运算、10、外部系统响应 等等组成。
对于一个系统的用户来说,从用户点击一个按钮、链接或发岀一条指令开始,到 系统把结果以用户希望的形式展现出来为终止,整个过程所消耗的时间是用户对 这个软件性能的直观印象,也就是我们所说的响应时间。当响应时间较短时,用 户体验是很好的,当然用户体验的响应时间包括个人主观因索和客观响应时间。 在设计软件时,我们就需要考虑到如何更好地结合这两部分达到用户最佳的体 验。如:用户在大数据量查询时,我们可以将先捉取岀来的数据展示给用户,在 用户看的过程中继续进行数据检索,这时用户并不知道我们后台在做什么,用户 关注的是用户操作的响应吋间。
我们经常说的一个系统吞吐量,通常曲QPS (TPS)、并发数两个因索决定,每 套系统这两个值都有一个相对极限值,在应用场景访问压力下,只要某一项达到 系统最高值,系统的吞吐量就上不去了,如果压力继续增大,系统的吞吐量反而 会下降,原因是系统超负荷工作,上下文切换、内存等等其它消耗导致系统性能 下降,决定系统响应吋间要素。
缓冲(Buffer)
缓冲区是一块特定的内存区域,开辟缓冲区的目的是通过缓解应用程序上下层Z 间的性能差异,提高系统的性能。在日常生活中,缓冲的一个典型应用是漏斗。 缓冲可以协调上层组件和下层组件的性能差,当上层组件性能优于下层组件吋, 可以冇效减少上层组件对下层组件的等待时间。基于这样的结构,上层应用组件 不需要等待卜?层组件真实地接受全部数据,即可返回操作,加快了上层组件的处 理速度,从而捉升系统整体性能。
使用BufferedWriter进行缓冲
BuffcrcdWritcr就是一个缓冲区用法,一般來说,缓冲区不宜过小,过小的缓 冲区无法起到真正的缓冲作用,缓冲区也不宜过大,过大的缓冲区会浪费系统内 存,增加GC负担。尽量在I/O组件内加入缓冲区,可以提高性能。一个缓冲 区例子代码如清单1所示。
清单1.加上缓冲区之前示例代码
import java, awt?Color;
import java. awt. Graphics;
import java. awt. Graphics2D;
import java. awt. Image;
import javax. swing. JApplct;
public class NoBufferMovingCirc1e extends JApplet implements Runnable{ Image screenTmage = null;
Thread thread;
int x = 5;
int move = 1;
public void init () {
serecnlmage 二 crcatcImagc(230, 160);
}
public void start (){
if(thread 二二 null){
thread 二 new Thread(this);
thread, start ();
}
}
?Override
public void run() {
// TODO Auto-generated method stub
try {
System, out. pri ntln (x);
whilc(true) {
x+二move;
System? out. println(x);
if((x105)|| (x5)) {
move*二一1;
i
j
repaint ();
Thread? sleep(lO);
}
}catch (Exception e) { public void drawCirc1e(Graphics gc) { Graphics2D g 二(Graphics2D) gc;
g. setColor (Color. GREEN);
g. fillRcct(O, 0, 200, 100);
g.setColor (Color, red);
g. fillOvaKx, 5, 90, 90);
}
public void paint (Graphics g){
g.setColor (Color, white);
g. fillRect(0, 0, 200, 100);
drawCircle(g);
程序可以完成红球的左右平移,但是效果较养,因为每次的界面刷新都涉及图片 的重新绘制,这较为费时,因此,
原创力文档


文档评论(0)