Threads
本节介绍并发相关函数。exchange.Go将耗时的调用放到后台执行,EventLoop等待并发调用的结果和事件,这两个函数适用于所有支持的编程语言;下列多线程对象仅支持JavaScript。ctx.subscribe、ctx.poll是托管者的WebSocket推送接口:ctx.subscribe()用于订阅行情、全市场ticker或账户私有数据流,返回Subscription对象(一次订阅多个品种时返回订阅对象数组),ctx.poll()用于获取推送事件。ctx.order、ctx.cancel通过交易所的REST接口下单、撤单,收到交易所返回的结果后才返回;ctx.submit通过交易所的WebSocket交易接口下单、撤单(支持批量操作),请求写出后立即返回,结果通过应答事件由ctx.poll()获取。JavaScript、Python策略使用全局ctx对象,Rust使用ctx模块中的同名函数。订阅归属于发起订阅的线程,主线程和各个子线程分别订阅、分别获取事件,也都可以下单。推送与exchange.GetTicker()等REST接口互不影响,各交易所的推送支持情况见能力矩阵。
发明者量化交易平台从系统底层支持JavaScript语言策略的多线程功能,提供以下对象:
| 对象 | 说明 | 备注 |
|---|---|---|
| threading | 多线程全局对象 | 成员函数:Thread、getThread、mainThread等。 |
| Thread | 线程对象 | 成员函数:peekMessage、postMessage、join等。 |
| ThreadLock | 线程锁对象 | 成员函数:acquire、release。可作为线程执行函数的参数传入线程环境。 |
| ThreadEvent | 事件对象 | 成员函数:set、clear、wait、isSet。可作为线程执行函数的参数传入线程环境。 |
| ThreadCondition | 条件变量对象 | 成员函数:notify、notifyAll、wait、acquire、release。可作为线程执行函数的参数传入线程环境。 |
| ThreadDict | 字典对象 | 成员函数:get、set。可作为线程执行函数的参数传入线程环境。 |
| Server | 服务对象 | 由threading.Serve()返回。成员函数:addr、close、stop、join、pending。可作为线程执行函数的参数传入线程环境。 |
本章内容整章阅读
| 名称 | 描述 |
| exchange.Go | 多线程异步支持函数,可以把所有支持的函数的操作变成异步并发执行。 |
| EventLoop | 监听事件:当任意WebSocket有可读数据,或exchange.Go()、HttpQuery_Go()等并发任务完成时返回。 |
| ctx.subscribe | 订阅WebSocket推送,可订阅品种行情、全市场ticker或账户私有数据流,返回Subscription对象。 |
| ctx.poll | 取出本线程订阅的下一条推送事件,可设置等待超时。 |
| ctx.order | 通过交易所的REST接口下单,待交易所返回订单号后返回。 |
| ctx.cancel | 通过交易所的REST接口撤销一个订单,等待交易所确认后返回。 |
| ctx.submit | 通过交易所的WebSocket交易接口下单、撤单:请求发送后立即返回请求号,不等待交易所应答;每笔请求的结果以一条应答事件(kind为ack)发送给调用该函数的线程,通过ctx.po… |
| Subscription (4) | 订阅对象,由ctx.subscribe返回,代表一路推送订阅。 |
| threading (10) | 全局多线程管理工具,提供了创建并发线程、线程锁、条件变量等功能。 |
| Thread (9) | 线程对象,可以通过threading.Thread()、threading.getThread()、threading.mainThread()、threading.currentThread()创建或返回。 |
| ThreadLock (2) | 线程锁对象,用于多线程同步处理。 |
| ThreadEvent (4) | 事件对象,用于多线程间的事件通知和信号传递。 |
| ThreadCondition (5) | 条件变量对象,用于实现多线程间的同步与通信。 |
| ThreadDict (2) | 线程安全的字典对象,用于在多线程环境中进行数据共享。 |
| Server (5) | threading.Serve函数的返回值,代表一个正在运行的服务。 |