为什么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

证券期货交易高并发模型相关推荐

  1. 【项目学习】C++实现高并发服务器——代码学习(一)Reactor高并发模型

    项目来源:WebServer 上一篇:环境搭建 本文介绍以下功能的代码实现 利用IO复用技术Epoll与线程池实现多线程的Reactor高并发模型: 一.IO复用技术 IO多路复用使得程序能同时监听多 ...

  2. Go 语言编程 — GPM 与 CSP 高并发模型

    目录 文章目录 目录 GPM 调度模型 基本概念 G(Goroutine) P(Processor) M(Machine) Golang Runtime Scheduler M:N 两级线程调度模型 ...

  3. java高并发抢单编程模型_Java高并发模型

    package MainFixedFuc; import java.util.concurrent.ExecutorService; import java.util.concurrent.Execu ...

  4. 使用 python web 框架 进行高并发模型上线部署 的架构 思路探索

    文章大纲 web 框架性能测试 基准 sanic lstm yolo postman post 图片 sanic 服务处理 flask + gevent + gunicorn lstm yolo gr ...

  5. 【项目学习】C++实现高并发服务器——代码学习(二)存储解析HTTP请求报文,创建响应报文

    项目来源:WebServer 上一篇:Reactor高并发模型 本文介绍以下功能的代码实现 利用标准库容器封装char,实现自动增长的缓冲区: 利用正则与状态机解析HTTP请求报文,实现处理静态资源的 ...

  6. UDP实现高并发其实非常简单(续集)

    上周放假时跟着小小学python,就写了一个所谓 "高并发UDP服务器" ,详见: https://blog.csdn.net/dog250/article/details/115 ...

  7. mongodb线程池_常用高并发网络线程模型设计及MongoDB线程模型优化实践

    服务端通常需要支持高并发业务访问,如何设计优秀的服务端网络IO工作线程/进程模型对业务的高并发访问需求起着至关重要的核心作用. 本文总结了了不同场景下的多种网络IO线程/进程模型,并给出了各种模型的优 ...

  8. 高并发编程-重新认识Java内存模型(JMM)

    文章目录 从CPU到内存模型 内存模型如何确保缓存一致性 并发变成需要解决的问题 (原子性.可见性.有序性) 内存模型需要解决的问题 Java内存模型 JMM的API实现 原子性 synchroniz ...

  9. 高并发编程-通过volatile重新认识CPU缓存 和 Java内存模型(JMM)

    文章目录 概述 volatile定义 CPU缓存 相关CPU术语 CPU缓存一致性协议MESI 带有高速缓存的CPU执行计算的流程 CPU 多级的缓存结构 Java 内存模型 (JMM) 线程通信的两 ...

最新文章

  1. python 学习之 PythonAdvance2
  2. WINCE的内存配置-config.bib文件的解析
  3. 深入理解ES6之迭代器与生成器
  4. pytorch 命令行运行_PyTorch简介与相关安装
  5. 2017下半年网络规划设计师考试下午真题
  6. 【测试】禅道搭建在服务器上的操作步骤
  7. 数论之神 HYSBZ - 2219 (原根+指标+bsgs+crt+exgcd+思维)
  8. tf.map_fn 多输入
  9. 语音识别基本原理介绍之gmm-hmm续
  10. 0.99元用7天,金山云大米云主机给你这个机会!
  11. java正态分布的运用
  12. 梁宁——产品的场景(阅读总结)
  13. clion-debug调试步骤
  14. 云原生|kubernetes|centos下安装部署kubeapps以及简单的使用示例
  15. 手机上好用的apm测试软件,在哪才能找到测apm的软件  及如合使用  – 手机爱问...
  16. 单片机双字节数乘法运算实验_单片机究竟是如何构成的呢
  17. MATLAB中运动造成的图像模糊
  18. AddressBook 地址簿  (电话簿) 访问与修改-IOS开发
  19. 计算机专业相关的职业技术证书有哪些,你知道吗?
  20. 我知道的风俗 和我喜欢的节日

热门文章

  1. 跟我学Springboot开发后端管理系统5:数据库读写分离
  2. 哥们,你真以为你会做这道JVM面试题?
  3. 5亿整数的大文件,怎么排?
  4. 送一款巧克力式绝美键盘!真香!
  5. Hinton再挖新坑:改进胶囊网络,融合Transformer神经场等研究
  6. 听声辨位过时了!这个AI系统仅凭光回声就能得到3D图像
  7. 清华大学计算机博士,带你搞定大厂面试题
  8. 用Python分析了1w四六级数据,教你如何通过四六级!
  9. 美多商城之支付(支付宝介绍)
  10. RESTful视图之Request 与 Response