首页 文章 精选 留言 我的

精选列表

搜索[去水印],共10000篇文章
优秀的个人博客,低调大师

量化数据采集云服务实践:行情 API 历史分钟线拼接的数据去重与缺失修复方案

在云端搭建量化回测、因子建模、日内策略研发的数据底座时,多数开发者会依托云服务器部署 7×24 小时行情采集程序,通过第三方行情 API 批量拉取历史分钟 K 线构建标准化时序数据集。线上长期运行过程中会出现隐蔽的数据一致性缺陷:分段拉取分时数据简单拼接入库后,前端行情看板展示无明显异常,但批量回测、指标批量运算时,成交量统计失真、技术指标偏移、回测收益曲线与实盘运行结果持续偏离。

优秀的个人博客,低调大师

🏆【Alibaba中间件技术系列】「RocketMQ技术专题」带你一起去探索RocketMQ服务架构的线程模型分析

前言介绍 RocketMQ 是个消息服务器,也是个网络服务器。接下来我们将从网络 IO 模型,线程模型,看看 RocketMQ 是如何设计的。 IO 模型 RocketMQ 使用了 Netty 作为网络通信框架,自然而然使用了 Reactor 模型,或者说 Select 模型、Epoll 模型。即一个线程管理 N 个 Socket 的模式,此模式可管理海量连接,基本是所有网络服务器的首选。 配置相关的RocketMQ的配置 RocketMQ的Boss线程数为 1, Worker 线程数为 CPU * 2. 在说线程模型之前,先看看 RocketMQ 如何设计 Server 接口的。 RemotingService作为顶层接口,定义了 启动和关闭,另外还有注册 RPC 钩子,职责简单。他的两个子接口 RemotingServer 和 RemotingClient 各自增加了自己的抽象接口。 Server 专属的 localListenPort 和 getProcessorPair Client 专属的 getNameServerAddressList 等 注意:两者都有 invokeSync 方法,但,参数不同,这也是因为他们自身的角色不同所影响的。 至于NettyRemotingAbstract 抽象类,这只是个简单的”抽取重复代码”的“简单操作”。 再下面,就是具体实现类,每个类,都有内部类,都是Netty各种Handler 的实现: NettyConnectManageHandler 负责处理 注册,连接,异常等事件,继承自 ChannelDuplexHandler。 NettyServerHandler 则是关键的业务处理类,处理真正的 Msg,继承自 SimpleChannelInboundHandler。 HandshakeHandler 负责处理握手程序,这里就不解释了。 以上 3 个是 Server 端的 Handler,都是NettyRemotingServer的内部类。 线程模型 NettyServerHandler作为处理业务的关键类,每个 worker 线程都有自己的单独实例,但该类只是做个包装或者桥接而已,作用不大, NettyRemotingServer才是关键。 当 Request 进入到 Server 中,MQ 会根据 请求类型 code 找到对应的处理器,MQ 有多种处理器,如下: 他们都继承自 NettyRequestProcessor 接口: 此接口只有 2 个方法,处理请求和拒绝请求,处理请求的参数是 Netty 的 context 和自身的RemotingCommand 对象,这是个大对象: RemotingCommand 的成员变量,这里说下 flag 的作用,其他就不说了。 flag表示这次请求是什么类型。 倒数第一位,0 表示请求,1 表示返回。 倒数第二位,1 表示 oneWay。 NettyRequestProcessor 刚刚提到 NettyRequestProcessor ,这是个处理器,在 MQ 中,每个 NettyRequestProcessor 都绑定了一个线程池,在 MQ 的抽象里,有个 Pair 对象,如下: public class Pair<T1, T2> { private T1 object1; private T2 object2; public Pair(T1 object1, T2 object2) { this.object1 = object1; this.object2 = object2;} public T1 getObject1() { return object1;} public void setObject1(T1 object1) {this.object1 = object1; } public T2 getObject2() { return object2;} public void setObject2(T2 object2) { this.object2 = object2;} } 同时,还有个 Hash 表,用 code 映射了 Pair。如此,就实现了:通过请求 code 找到“线程池和处理这种请求的处理器”,然后,提交一个任务到该线程池,任务中,会调用该处理器的 processRequest 方法,或 rejectRequest 方法。 上图中,为处理请求的关键步骤。执行钩子就不说了,我们知道,设计代码时,关键步骤都加钩子,便于扩展和以后加代码。 其中,会调用 processRequest 方法,执行具体业务,并得到返回值。然后使用 netty 的 ctx 对象,将返回值直接写回 Socket。 如果发生错误了,也将错误构造成消息,写回客户端。 注意,这里一直有个操作 就是 response.setOpaque(opaque) ,就是设置请求 ID,这是 IO 多路复用的关键。 Netty 每次请求,都会调用 NettyRemotingServer 的 processRequestCommand 方法。 而 NettyRemotingServer 保存了请求 code 和 Pair<处理器,线程池> 的hash 映射表。 每次请求,根据 code 找到线程池,生成一个新任务,提交到线程池,任务里,会执行“处理器” 的processRequest 方法得到返回值,最后写回客户端。 MQ 为每种类型的任务,使用了不同的线程池,即线程池隔离。同时,也根据每种不同的任务类型,设置了不同的线程池参数。 参数介绍 Send 发送消息任务,线程池大小是1。 pull 拉取消息任务,线程池大小是 16 + CPU*2 query 查询任务,线程池大小是 8 + CPU*2; 当然还有其他的,这里就不枚举了,注意:大部分线程池都是多线程,只有 send 任务默认是单线程。 send 操作是个写操作,最后是要上锁的,虽然锁的粒度已经足够小,但仍然是有锁的。如果是有锁的,多线程的是不划算的。这也是 RocketMQ 的设计决定只写一个 CommitLog。 能像Kafka一样,同时写多个文件,是不是就可以利用多线程了呢? 当然,这里不是说多线程一定好,只是表达另外一种思路。如果单线程就能触发 MQ 瓶颈,多线程也没啥意义。 总结

优秀的个人博客,低调大师

六路施密特触发反相器 HCR74AHC14:从原理、参数到整形 / 去抖 / 振荡 / 电平转换设计

2.0~5.5V 宽压 | 双阈值滞回 | 5V 传播延迟典型 3.2ns | 输入 5.5V 容忍 | 六通道 SOIC-14 / TSSOP-14 导读一分钟速读与适用判断 一句话:HCR74AHC14 是一颗 6 路独立的施密特触发反相器(CMOS 推挽输出、逻辑 Y=A),靠上升/ 下降两个阈值和中间的滞回带,把缓慢、抖动、带噪的输入整形成边沿干净的方波。

资源下载

更多资源
Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册