@async 用在循环中,可以大幅提升性能,特别是循环量较大时。代码如下:

1、向量

using Distributedn = 1000000
println("n :",n)
println("iter_no_async :")
@time value1 = iter_no_async(n)
println("iter_async :")
@time value2 = iter_async(n)
@assert value1 ==value2function iter_no_async(n)arr = Array{Float64}(undef,n)for i in 1:narr[i] = sin(i^2)endreturn arr
endfunction iter_async(n)arr = Array{Float64}(undef,n)@async for i in 1:narr[i] = sin(i^2)endreturn arr
end
# 100万 =>9倍
julia> @run testfun
n :1000000
iter_no_async :0.037306 seconds (16.38 k allocations: 8.526 MiB)
iter_async :0.004689 seconds (9.04 k allocations: 8.132 MiB)
iter_async (generic function with 1 method)
# 10万=>2倍
julia> @run testfun
n :100000
iter_no_async :0.011192 seconds (16.38 k allocations: 1.659 MiB)
iter_async :0.004836 seconds (9.04 k allocations: 1.266 MiB)
iter_async (generic function with 1 method)
# 1万 => 略有提升
julia> @run testfun
n :10000
iter_no_async :0.007968 seconds (16.38 k allocations: 995.775 KiB)
iter_async :0.005080 seconds (9.04 k allocations: 592.965 KiB)
iter_async (generic function with 1 method)
# 1000 =>不明显
julia> @run testfun
n :1000
iter_no_async :0.008439 seconds (16.38 k allocations: 925.807 KiB)
iter_async :0.007028 seconds (9.03 k allocations: 522.699 KiB)
iter_async (generic function with 1 method)

比如,数组拆分,一个数组要拆分成n个平均的等份,这个时侯,用@async 效果也非常好!性能提升数十倍!

2、矩阵

using Distributed
n = 1000; m = 10
println("n :$n  m:$m")
println("iter_no_async :")@time value1 = iter_no_async(n,m)println("iter_async :")
@time value2 = iter_async(n,m)
@assert value1 ==value2function iter_no_async(n,m)arr = Array{Float64}(undef,n,m)for i in 1:nfor j in 1:marr[i,j] = sin(i^2) +sin(j^2)endendreturn arr
endfunction iter_async(n,m)arr = Array{Float64}(undef,n,m)@async for i in 1:n@async for j in 1:marr[i,j] = sin(i^2) +sin(j^2)endendreturn arr
end
julia> @run testfun
n :1000  m:10
iter_no_async :0.011082 seconds (20.51 k allocations: 1.164 MiB)
iter_async :0.005053 seconds (9.26 k allocations: 601.795 KiB)
iter_async (generic function with 1 method)

两层的@async ,性能差不多近2倍。

3、拆分

function split_array(rmap,n)responses = Vector{Array{Float64}}(undef, n)row,col = size(rmap)unit = floor(Int64,row/n)@async for i in 1:nif i<nresponses[i] = rmap[(i-1)*unit + 1 : i*unit,:]elseresponses[i] = rmap[(i-1)*unit + 1 : row,:]endendreturn responses
end

Julia : 用@async提升循环性能相关推荐

  1. SpringBoot巧用 @Async 提升API接口并发能力!

    异步调用几乎是处理高并发Web应用性能问题的万金油,那么什么是"异步调用"? "异步调用"对应的是"同步调用",同步调用指程序按照定义顺序依 ...

  2. SpringBoot巧用 @Async 提升API接口并发能力

    异步调用几乎是处理高并发Web应用性能问题的万金油,那么什么是"异步调用"? "异步调用"对应的是"同步调用",同步调用指程序按照定义顺序依 ...

  3. 从软件工程的角度比较Swift、Go和Julia,我有了这些发现

    作者 | Erik Engheim 译者 | 弯月 出品 | CSDN(ID:CSDNnews) 从已有代码的扩展和重用方面考虑,这几种语言的类扩展.duck type(鸭子类型)和多分发孰优孰劣? ...

  4. julia系列1:介绍与安装

    参考 https://zhuanlan.zhihu.com/p/41953244 还有这篇教程:https://zhuanlan.zhihu.com/p/60889456 详见julia中文文档:ht ...

  5. Julia并行计算笔记(一)

    本文是<Julia语言程序设计>(魏坤)第14章的读书笔记,加入了很多自己测试和官方文档的内容.内容基本上完整覆盖,不过对照原著风味更佳.全文很长,分为五篇,这是第一篇. 一.进程.线程 ...

  6. 从用户的角度看 java_[Java教程]开发网站要从用户的角度出发!

    [Java教程]开发网站要从用户的角度出发! 0 2016-10-10 21:00:06 我本人就是一个用户,当我在使用全国软考网是所遭遇的问题让我头痛,报名和查看信息要登陆账户时,浏览器总是报错,弹 ...

  7. 宕机三个月、36亿打水漂,印度骄傲Infosys如何活成了全球笑话?

    往期热门文章: 1.Spring Boot巧用 @Async 提升API接口并发能力!NB! 2.再见MybatisPlus,阿里推出新ORM框架! 3.这个 MySQL Bug 99% 的人会踩坑! ...

  8. CCES dsp mips 优化心得

    ADI dsp cces 优化心得 1.runtime checks 勾选会占用很大的mips 2LDF 设置系统的 heap(堆) stack(栈) 3.常用的设置 4.双重循环内,尽量减少内循环的 ...

  9. 【283期】面试官问:高并发场景下,如何保证全局唯一分布式 ID 生成?

    点击上方"Java精选",选择"设为星标" 别问别人为什么,多问自己凭什么! 下方有惊喜,留言必回,有问必答! 每一天进步一点点,是成功的开始... 前言 系统 ...

  10. async/await 的基本实现和 .NET Core 2.1 中相关性能提升

    前言 这篇文章的开头,笔者想多说两句,不过也是为了以后再也不多嘴这样的话. 在日常工作中,笔者接触得最多的开发工作仍然是在 .NET Core 平台上,当然因为团队领导的开放性和团队风格的多样性(这和 ...

最新文章

  1. 技术图文:C# 语言中的扩展方法
  2. NAACL 2021 | 担心GPT-3被喂假消息?谷歌新研究,将知识图谱转成“人话”用于训练...
  3. 研究揭示大脑在工作记忆中存储信息的神经机制
  4. Access denied for user ‘root‘@‘localhost‘ (using password:YES) 解决方案
  5. 赠书|零压力入门算法的顶流畅销书《漫画算法》
  6. 四.jmeter代码学习, SampleResult【持续更新】
  7. RFQ(request for quotation)
  8. GitHub 日收 12,000 星,微软新命令行工具引爆程序员圈!
  9. shell命令xargs
  10. h5调微信支付 unkonw url_h5移动端调用支付宝、微信支付的实现
  11. 让注册体验来得更简单点吧
  12. IT服务管理(一)服务的演变与整体观
  13. 1Flask使用2路由3模板
  14. 会员营销如何提升企业与会员之间的互动频率
  15. 【原创】新韭菜日记55--20190412----各行业龙头股
  16. 人工智能的未来发展,需要以人为本
  17. 总线、通信接口、串行通信、并行通信详解
  18. JAVA七大设计原则总结(详解篇)
  19. MySQL的count(1)特别慢的解决方案
  20. MySQL-彻底让你搞懂mysql索引

热门文章

  1. 类中的反射 装逼利器
  2. topcoder srm 445 div1
  3. 第二百二十一节,jQuery EasyUI,Form(表单)组件
  4. JavaWeb开发之网站实现文件上传功能
  5. jQuery-1.9.1源码分析系列(十一) DOM操作续——克隆节点
  6. Android:RGB颜色对照表
  7. Oracle join连接的使用
  8. XidianOJ 1141 抢人头
  9. Flex桌面AIR软件日志添加
  10. 路由器交换机[置顶] 路由器和交换机的综合实验⑵