本文档介绍xlt_api的线程架构。
用户线程
用户线程需要负责处理:
- API初始化和配置
- 登录/登出请求
- 交易请求(报单、撤单)
- 查询请求(资金、持仓、订单、成交查询)
注意:交易请求会在用户线程直接发送报单消息,报单如需绑核需要用户自行对调用insert_order()方法的用户线程进行绑核
回调线程
回调函数在独立的线程中执行,包括:
注意
- 回调函数需要快速返回,避免阻塞回调线程。如果回调函数执行时间较长,建议将数据放入队列,在另一个线程中处理。
行情线程
行情接收线程根据配置模式不同而不同:
单线程模式
单线程模式指两个市场的Level2行情分别在单个线程接收,若全部打开会有以下三个线程:
- Level1行情接收线程:接收上交所和深交所Level1行情
- 上海Level2行情接收线程:接收上海Level2所有类型行情
- 深圳Level2行情接收线程:接收深圳Level2所有类型行情
配置接口XLTApiConfig::receive_quote_in_single_thread()
using namespace x1;
{true, -1},
{true, 3},
{true, 4}
);
API配置类 此类用于配置XLT API的各项参数,如日志路径、日志级别、交易日、网卡地址、网关地址、行情接收配置等。 用户需要在调用XLTApi::initialize方法前,创建此类实例,并设置相应...
定义 xlt_api_config.h:49
void receive_quote_in_single_thread(quote_receive_cfg_t l1, quote_receive_cfg_t sse_l2, quote_receive_cfg_t szse_l2)
配置行情接收,单线程模式
快照和逐笔独立线程模式
快照和逐笔独立线程模式指两个市场的Level2行情分别在快照和逐笔两个线程接收,若全部打开会有以下五个线程:
- Level1快照接收线程:接收上交所和深交所Level1快照行情
- 上海Level2快照接收线程:接收上海Level2快照行情
- 上海Level2逐笔接收线程:接收上海Level2逐笔行情
- 深圳Level2快照接收线程:接收深圳Level2快照行情
- 深圳Level2逐笔接收线程:接收深圳Level2逐笔行情
配置接口XLTApiConfig::receive_quote_in_snap_tick_thread()
using namespace x1;
{true, -1},
{true, 2},
{true, 3},
{true, 4},
{true, 5}
);
void receive_quote_in_snap_tick_thread(quote_receive_cfg_t l1, quote_receive_cfg_t sse_l2_snap, quote_receive_cfg_t sse_l2_tick, quote_receive_cfg_t szse_l2_snap, quote_receive_cfg_t szse_l2_tick)
配置行情接收,快照和逐笔独立线程模式
按行情类型独立线程模式
按行情类型独立线程模式指两个市场的Level2各类行情分别独立线程接收,若全部打开会有以下十一个线程:
每种行情类型在独立线程中接收:
- Level1行情接收线程
- 上海Level2竞价快照接收线程
- 上海Level2竞价逐笔接收线程
- 上海Level2指数接收线程
- 上海Level2债券快照接收线程
- 上海Level2债券逐笔接收线程
- 深圳Level2竞价快照接收线程
- 深圳Level2竞价逐笔接收线程
- 深圳Level2指数接收线程
- 深圳Level2债券快照接收线程
- 深圳Level2债券逐笔接收线程
配置接口XLTApiConfig::receive_quote_in_channel_per_thread()
using namespace x1;
{true, -1},
{
{true, 2},
{true, 3},
{true, 4},
{true, 5},
{true, 6}
},
{
{true, 7},
{true, 8},
{true, 9},
{true, 10},
{true, 11}
}
);
void receive_quote_in_channel_per_thread(quote_receive_cfg_t l1, quote_l2_receive_cfg_t sse_l2, quote_l2_receive_cfg_t szse_l2)
配置行情接收,按行情类型独立线程模式
线程安全
- API接口调用是线程安全的,可以在多个线程中调用
- 回调函数在独立线程中执行,需要注意线程安全
- 建议在回调函数中使用锁或其他同步机制保护共享数据