在实现量化策略时,很多情况下,并发执行可以降低延时提升效率。以对冲机器人为例,需要获取两个币的深度,顺序执行的代码如下:


请求一次rest API存在延时,假设是100ms,那么两次获取深度的时间实际上不一样,如果需要更多的访问,延时问题将会更突出,影响策略的执行。 JavaScript由于没有多线程,因此底层封装了Go函数解决这个问题,但由于设计机制,实现起来较为繁琐。

在大多数简单情况下,这样写策略并无问题。但注意到每次策略循环都要重复这个过程,中间变量a,b实际上只是临时辅助。如果我们的并发任务非常多,就要另外纪录a和depthA,b和depthB之间的对应关系,当我们的并发任务不确定时,情况就更加复杂。因此,我们希望实现一个函数:当写Go并发时,同时绑定一个变量,当并发运行结果返回时,结果自动赋值给变量,这样就省去了中间变量,使程序更加简洁。具体实现如下:

我们定义了一个G函数,其中参数t是将要执行的Go函数,ctx是记录程序上下文,f为具体赋值的函数。等会就会看到这个函数的作用。这时,整体的程序框架可以写为类似于“生产者-消费者”模型(有一些区别),生产者不断发出任务,消费者将它们并发执行,一下代码仅为演示,不涉及到程序的执行逻辑。

看上去兜了一圈只实现了一个简单功能,实际上大大简化了代码复杂程度,我们只需关心程序需要产生什么任务,由worker()程序自动将他们并发执行,并返回相应的结果。灵活性提升了很多。

最新文章

  1. .Net 转战 Android 4.4 日常笔记(10)--ADT集成环境更新SDK
  2. MyEclipse导入jquery-1.8.0.min.js等文件报错的解决方案
  3. CSS 样式的优先级
  4. 如何自学Java
  5. ionic默认样式android和ios的一些不同(当时真是纠结啊~)
  6. 1502: [NOI2005]月下柠檬树 - BZOJ
  7. FOR 循环 索引从n 开始
  8. 在redis中查询一个KEY的值
  9. [转]javascript中style.left和offsetLeft的使用
  10. python【第二篇】列表、元组、字典及文件操作
  11. 一个可以拓展的垂直多级导航栏 Demo
  12. C#关于图片的相关处理
  13. Codeforces Round #434 (Div. 2, based on Technocup 2018 Elimination Round 1)&&Codeforces 861C Did you mean...【字符串枚举,暴力】
  14. dispatch_barrier_async--屏障是一个同步点
  15. me 云面试
  16. Mui 下拉刷新,刷新完成功能实现
  17. DB2的进程/线程解析(转)
  18. github学习心得。哈哈,今天上传了自己的项目!
  19. Vim中如何使用正则进行搜索
  20. tomcat 8.0 进程没有全部杀死

热门文章

  1. sql Left right join 多表 注意表的连接顺序
  2. MVC 异步调用
  3. WPF 创建无边框的圆角窗口
  4. 元素命名空间中的“MvcBuildViews”无效
  5. REDM基础教程1-下载、编译代码
  6. vista下开机启动 简单绕过UAC的方法(自己使用runas参数重新启动自己,有点意思)
  7. 解释为什么.net 第一次请求比较慢
  8. fullpage.js使用方法
  9. python列表的内建函数
  10. asp.net core 系列之Response caching 之 Distributed caching(3)