证券期货交易高并发模型
为什么80%的码农都做不了架构师?>>>
交易系统中的产品和产品之间是隔离的,产品之间的消息不共享,也不会造成干扰。 同一个产品下的订单必须顺序处理,但不同的产品之间的订单没有顺序概念。
所以交易系统会按照产品来分线程。
假设有N个线程,M个产品。如何让线程能充分的利用CPU,并具有一定的公平性能照顾到每一个产品中的订单?
我们创建一个环,将每个产品当做一个节点安放在环上。每个节点带有一个队列,队列中存放源源不断提交给本产品的消息,如订单。如下图所示:
假设有两个线程T1,T2。每个线程都会按照环的顺序,一个节点一个节点的处理。为了不被某一个产品的巨量消息卡住,导致其它产品无法被执行。线程会消费batchSize个消息,就会退出当前产品,继续处理下一个产品。如果当前产品消息数量不足batchSize,则消费完所有消息立即跳往下一个产品。
因为同一个产品下的消息必须为串行处理,所以同一个产品在同一时间只能有一个线程对其进行处理。如下图所以。T2线程决定跳往下一个节点时,发现下一个节点被线程T1所占,T2则立刻越过下一个节点,继续向后寻找空闲节点。
T2跳过T1所在的节点,找到后续节点,进行锁定,然后消费。
在所有节点中,有一个特殊节点,编号为0的节点。此节点处理和产品不相关的消息。例如创建用户,创建新产品。创建新产品会在环上创建新节点。
当前模型中均使用CAS锁,可以减少锁竞争开销。
后续优化:
1, 删除组合时,清理环。当前因为组合不多,并且清理环会遇到复杂的并发问题。
2, 产品上没有消息时,让线程扫描快速越过。当前线程获取到节点锁以后,才知道节点上是否有消息,后续如何能在获取锁之前就可以获取状态。
此并发模型具有很强的扩展能力,假设一个线程可以处理500个订单每秒,那么10个线程可能达到4000以上。当同一台物理机无法对线程再扩展时,可以再另一台物理机上,再开启一个进程。
转载于:https://my.oschina.net/xpbug/blog/731373
证券期货交易高并发模型相关推荐
- 【项目学习】C++实现高并发服务器——代码学习(一)Reactor高并发模型
项目来源:WebServer 上一篇:环境搭建 本文介绍以下功能的代码实现 利用IO复用技术Epoll与线程池实现多线程的Reactor高并发模型: 一.IO复用技术 IO多路复用使得程序能同时监听多 ...
- Go 语言编程 — GPM 与 CSP 高并发模型
目录 文章目录 目录 GPM 调度模型 基本概念 G(Goroutine) P(Processor) M(Machine) Golang Runtime Scheduler M:N 两级线程调度模型 ...
- java高并发抢单编程模型_Java高并发模型
package MainFixedFuc; import java.util.concurrent.ExecutorService; import java.util.concurrent.Execu ...
- 使用 python web 框架 进行高并发模型上线部署 的架构 思路探索
文章大纲 web 框架性能测试 基准 sanic lstm yolo postman post 图片 sanic 服务处理 flask + gevent + gunicorn lstm yolo gr ...
- 【项目学习】C++实现高并发服务器——代码学习(二)存储解析HTTP请求报文,创建响应报文
项目来源:WebServer 上一篇:Reactor高并发模型 本文介绍以下功能的代码实现 利用标准库容器封装char,实现自动增长的缓冲区: 利用正则与状态机解析HTTP请求报文,实现处理静态资源的 ...
- UDP实现高并发其实非常简单(续集)
上周放假时跟着小小学python,就写了一个所谓 "高并发UDP服务器" ,详见: https://blog.csdn.net/dog250/article/details/115 ...
- mongodb线程池_常用高并发网络线程模型设计及MongoDB线程模型优化实践
服务端通常需要支持高并发业务访问,如何设计优秀的服务端网络IO工作线程/进程模型对业务的高并发访问需求起着至关重要的核心作用. 本文总结了了不同场景下的多种网络IO线程/进程模型,并给出了各种模型的优 ...
- 高并发编程-重新认识Java内存模型(JMM)
文章目录 从CPU到内存模型 内存模型如何确保缓存一致性 并发变成需要解决的问题 (原子性.可见性.有序性) 内存模型需要解决的问题 Java内存模型 JMM的API实现 原子性 synchroniz ...
- 高并发编程-通过volatile重新认识CPU缓存 和 Java内存模型(JMM)
文章目录 概述 volatile定义 CPU缓存 相关CPU术语 CPU缓存一致性协议MESI 带有高速缓存的CPU执行计算的流程 CPU 多级的缓存结构 Java 内存模型 (JMM) 线程通信的两 ...
最新文章
- python 学习之 PythonAdvance2
- WINCE的内存配置-config.bib文件的解析
- 深入理解ES6之迭代器与生成器
- pytorch 命令行运行_PyTorch简介与相关安装
- 2017下半年网络规划设计师考试下午真题
- 【测试】禅道搭建在服务器上的操作步骤
- 数论之神 HYSBZ - 2219 (原根+指标+bsgs+crt+exgcd+思维)
- tf.map_fn 多输入
- 语音识别基本原理介绍之gmm-hmm续
- 0.99元用7天,金山云大米云主机给你这个机会!
- java正态分布的运用
- 梁宁——产品的场景(阅读总结)
- clion-debug调试步骤
- 云原生|kubernetes|centos下安装部署kubeapps以及简单的使用示例
- 手机上好用的apm测试软件,在哪才能找到测apm的软件 及如合使用 – 手机爱问...
- 单片机双字节数乘法运算实验_单片机究竟是如何构成的呢
- MATLAB中运动造成的图像模糊
- AddressBook 地址簿 (电话簿) 访问与修改-IOS开发
- 计算机专业相关的职业技术证书有哪些,你知道吗?
- 我知道的风俗 和我喜欢的节日