Merge branch 'master' into develop

This commit is contained in:
andy pan 2018-06-29 10:57:43 +08:00
commit c968701894
2 changed files with 15 additions and 8 deletions

View File

@ -171,7 +171,7 @@ There was only the test of `ants` Pool because my computer was crash when it rea
**As you can see, `ants` can up to 2x~6x faster than goroutines without pool and the memory consumption is reduced by 10 to 20 times.** **As you can see, `ants` can up to 2x~6x faster than goroutines without pool and the memory consumption is reduced by 10 to 20 times.**
[1]: https://travis-ci.com/panjf2000/ants.svg?branch=develop [1]: https://travis-ci.com/panjf2000/ants.svg?branch=master
[2]: https://travis-ci.com/panjf2000/ants [2]: https://travis-ci.com/panjf2000/ants
[3]: https://godoc.org/github.com/panjf2000/ants?status.svg [3]: https://godoc.org/github.com/panjf2000/ants?status.svg
[4]: https://godoc.org/github.com/panjf2000/ants [4]: https://godoc.org/github.com/panjf2000/ants

View File

@ -6,7 +6,10 @@
[![godoc for panjf2000/ants][1]][2] [![goreportcard for panjf2000/ants][3]][4] [![MIT Licence](https://badges.frapsoft.com/os/mit/mit.svg?v=103)](https://opensource.org/licenses/mit-license.php) [![Build Status][1]][2]
[![godoc for panjf2000/ants][3]][4]
[![goreportcard for panjf2000/ants][5]][6]
[![MIT Licence][7]][8]
[英文说明页](README.md) | [项目介绍文章传送门](http://blog.taohuawu.club/article/42) [英文说明页](README.md) | [项目介绍文章传送门](http://blog.taohuawu.club/article/42)
@ -147,13 +150,13 @@ Memory : 8 GB 1867 MHz DDR3
![](benchmark_pool.png) ![](benchmark_pool.png)
**这里为了模拟大规模goroutine的场景两次测试的并发次数分别是100w和1000w前两个测试分别是执行100w个并发任务不使用Pool和使用了`ants`的Goroutine Pool的性能后两个则是1000w个任务下的表现可以直观的看出在执行速度和内存使用上`ants`的Pool都占有明显的优势。100w的任务量使用`ants`执行速度与原生goroutine相当甚至略快但只实际使用了不到5w个goroutine完成了全部任务且内存消耗仅为原生并发的40%而当任务量达到1000w优势则更加明显了用了70w左右的goroutine完成全部任务执行速度比原生goroutine提高了100%且内存消耗依旧保持在不使用Pool的40%左右。 ** **这里为了模拟大规模goroutine的场景两次测试的并发次数分别是100w和1000w前两个测试分别是执行100w个并发任务不使用Pool和使用了`ants`的Goroutine Pool的性能后两个则是1000w个任务下的表现可以直观的看出在执行速度和内存使用上`ants`的Pool都占有明显的优势。100w的任务量使用`ants`执行速度与原生goroutine相当甚至略快但只实际使用了不到5w个goroutine完成了全部任务且内存消耗仅为原生并发的40%而当任务量达到1000w优势则更加明显了用了70w左右的goroutine完成全部任务执行速度比原生goroutine提高了100%且内存消耗依旧保持在不使用Pool的40%左右。**
### Benchmarks with PoolWithFunc ### Benchmarks with PoolWithFunc
![](ants_bench_poolwithfunc.png) ![](ants_bench_poolwithfunc.png)
**因为`PoolWithFunc`这个Pool只绑定一个任务函数也即所有任务都是运行同一个函数所以相较于`Pool`对原生goroutine在执行速度和内存消耗的优势更大上面的结果可以看出执行速度可以达到原生goroutine的300%而内存消耗的优势已经达到了两位数的差距原生goroutine的内存消耗达到了`ants`的35倍且原生goroutine的每次执行的内存分配次数也达到了`ants`45倍1000w的任务量`ants`的初始分配容量是5w因此它完成了所有的任务依旧只使用了5w个goroutine事实上`ants`的Goroutine Pool的容量是可以自定义的也就是说使用者可以根据不同场景对这个参数进行调优直至达到最高性能。 ** **因为`PoolWithFunc`这个Pool只绑定一个任务函数也即所有任务都是运行同一个函数所以相较于`Pool`对原生goroutine在执行速度和内存消耗的优势更大上面的结果可以看出执行速度可以达到原生goroutine的300%而内存消耗的优势已经达到了两位数的差距原生goroutine的内存消耗达到了`ants`的35倍且原生goroutine的每次执行的内存分配次数也达到了`ants`45倍1000w的任务量`ants`的初始分配容量是5w因此它完成了所有的任务依旧只使用了5w个goroutine事实上`ants`的Goroutine Pool的容量是可以自定义的也就是说使用者可以根据不同场景对这个参数进行调优直至达到最高性能。**
### 吞吐量测试(使用于那种只管提交异步任务而无须关心结果的场景) ### 吞吐量测试(使用于那种只管提交异步任务而无须关心结果的场景)
@ -173,7 +176,11 @@ Memory : 8 GB 1867 MHz DDR3
**从该demo测试吞吐性能对比可以看出使用ants的吞吐性能相较于原生goroutine可以保持在2-6倍的性能压制而内存消耗则可以达到10-20倍的节省优势。** **从该demo测试吞吐性能对比可以看出使用ants的吞吐性能相较于原生goroutine可以保持在2-6倍的性能压制而内存消耗则可以达到10-20倍的节省优势。**
[1]: https://godoc.org/github.com/panjf2000/ants?status.svg [1]: https://travis-ci.com/panjf2000/ants.svg?branch=master
[2]: https://godoc.org/github.com/panjf2000/ants [2]: https://travis-ci.com/panjf2000/ants
[3]: https://goreportcard.com/badge/github.com/panjf2000/ants [3]: https://godoc.org/github.com/panjf2000/ants?status.svg
[4]: https://goreportcard.com/report/github.com/panjf2000/ants [4]: https://godoc.org/github.com/panjf2000/ants
[5]: https://goreportcard.com/badge/github.com/panjf2000/ants
[6]: https://goreportcard.com/report/github.com/panjf2000/ants
[7]: https://badges.frapsoft.com/os/mit/mit.svg?v=103
[8]: https://opensource.org/licenses/mit-license.php