影响性能的重要问题

2018-04-03 17:17:26 浏览数 (1)

在 2016 QCon 大会上,技术大牛 Martin Thompson(伦敦金融衍生品交易所LMAX的创始人兼CTO)进行了技术分享,主题是“影响性能的前10大错误”,内容较多,下面只介绍下 top 1,2

有兴趣的可以看下原文,地址

http://www.infoq.com/articles/top-10-performance-mistakes

1. Logging

Thompson认为logging是最容易影响性能的,他给了一个图表,描述了logging线程的增加与时间耗费的关系

从图中可以看出,随着用于logging的线程增加,消耗的时间随之线性增长

Thompson说测试了绝大多数的日志系统,画出来的图都是这样的,Loggers是系统性能的重要瓶颈,建议使用异步logger

有很多错误日志信息是重复的,Thompson建议只在第一次发生时记录日志,以后重复出现时,增加计时器即可

2. API Design

Thompson 认为在性能方面,很多API接口的设计都很糟糕

例如这个接口

public String[] split(String regex)

这个设计有什么问题呢?

首先,返回类型是一个固定长度的数组,那么在方法实现中就需要使用一个临时结构体,用于copy数据到数组

另外,调用者调用此接口后,得到一个数组,如果想要对结果做一些操作,如排序,他就不得不把数组中的数据copy到另一个结构体中

有什么更好的设计方法呢?

只需要简单的修改一下返回值的类型,不使用固定数组,而是返回一个迭代器,就可以避免第1个问题,如

public Iterable split(String regex)

如果想进一步提高性能,可以取消返回值,增加一个参数,让调用者自己提供存放结果数据的结构体,如

public void split (String regex, Collection<String> dst)

这样,如果调用者想去掉重复的数据,就可以使用SET,如果想要一个有序列表,就可以使用TreeMap

0 人点赞