前言几乎每本面向初学者的C语言或C++书籍在前面两章都会提到分支控制语句if……else和switch……case,在某些情况下这两种分支控制语句可以互相替换,但却很少有人去深究在if……else和switch……case语句的背后到底有什么异同?应该选择哪一个语句才能使得效率最高?要回答这些问题,只能走到switch语句的背后,看看这些语句到底是怎么实现的。 if语句与switch语句相信学过C
继续阅读

前言在C++多线程程序的开发过程中,资源的互斥访问是第一个要考虑的问题,常用的方法就是使用互斥锁对共享数据进行保护,而使用锁最大的风险就是有可能产生死锁,导致程序异常退出。因为这个风险的存在,所以我每次使用互斥锁的时候都小心翼翼,看互斥锁lock之后是否在合适的地方进行了unlock,在多个互斥锁同时使用的时候反复检查加锁的顺序是否会导致死锁……但是,百密一疏,自己还是亲手写出了一把死锁,导致付出
继续阅读

前言私以为个人的技术水平应该是一个螺旋式上升的过程:先从书本去了解一个大概,然后在实践中加深对相关知识的理解,遇到问题后再次回到书本,然后继续实践……接触C++并发编程已经一年多,从慢慢啃《C++并发编程实战》这本书开始,不停在期货高频交易软件的开发实践中去理解、运用、优化多线程相关技术。多线程知识的学习也是先从最基本的线程建立、互斥锁、条件变量到更高级的线程安全数据结构、线程池等等技术,当然在项
继续阅读

一个小场景在开始正式讨论我们的问题之前,我们先想象这么一个小场景: 场景1:6只小鸟停在电线上休息,都在等待食物。 场景2:我们向鸟群投放一条小虫,作为它们的食物。 场景3:6只小鸟看到有食物到来,都停止休息,一起飞起来去抢夺食物。 场景4:最终只有一只小鸟(bird4)能够吃到食物,其他小鸟无奈而又伤心的回到电线上继续休息。 何谓惊群问题?上面我们的小场景实际就是一个现实中的惊群问题,明
继续阅读

前言《CSAPP》讲到了局部性原理:一个编写良好的计算机程序常常具有良好的局部性(loacality)。也就是说,它们倾向于引用邻近于其他最近引用过的数据项,或者最近引用过的数据项本身。这种倾向性,被称为局部性原理(principle of locality),是一个持久的概念,对硬件和软件系统的设计和性能都有着极大的影响。 局部性原理代码示例为了让大家更加直观的感受到局部性原理对我们程序性能的影
继续阅读

问题背景  KMP算法是一种优化后的字符串匹配算法,可以将复杂度由暴力匹配的O(m*n)降低到O(m+n),具体原理就不再赘述,相信几乎任何一本算法书上面都会有KMP算法的详细介绍与实现。以前虽然学习过KMP算法,也清楚算法的原理,但是却从来没有完整实现过一次,闲来无事便打开Visual Studio准备使用C++独立实现一下。   代码如下: 12345678910111213141516171
继续阅读

前言  在多核并发编程中,如果将互斥锁的争用比作“性能杀手”的话,那么伪共享则相当于“性能刺客”。“杀手”与“刺客”的区别在于杀手是可见的,遇到杀手时我们可以选择战斗、逃跑、绕路、求饶等多种手段去应付,但“刺客”却不同,“刺客”永远隐藏在暗处,伺机给你致命一击,防不胜防。具体到我们的并发编程中,遇到锁争用影响并发性能情况时,我们可以采取多种措施(如缩短临界区,原子操作等等)去提高程序性能,但是伪共
继续阅读

什么是循环展开?  循环展开,英文中称(Loop unwinding或loop unrolling),是一种牺牲程序的尺寸来加快程序的执行速度的优化方法。可以由程序员完成,也可由编译器自动优化完成。循环展开最常用来降低循环开销,为具有多个功能单元的处理器提供指令级并行。也有利于指令流水线的调度。 循环展开对程序性能的影响  我们直接以实际代码向大家展示循环展开的作用,首先看未经过循环展开优化的代码
继续阅读

问题背景:  在开发股票自动化交易软件过程中,我们需要将股票的tick数据(每3s一笔)存储下来,供我们的股票交易策略部分使用。这种情况下首先想到使用MySql这种关系型数据库进行存储,但是我们的股票自动化交易软件对速度的要求极高,可能相差几十毫秒就是赚钱与亏钱的区别,而MySql这种传统数据库的插入与查询是很慢的,无法满足我们的要求。当然我们也可以选择既满足存储数据的要求又能达到我们需要的速度要
继续阅读

背景  事情是这样的:在股票的自动化交易软件开发过程中,我们使用了万得的一套股票行情获取API,伴随着API还提供了一个示例程序,我们在开发过程中借用了部分示例程序中的代码,其中就包括一个配置读取类:ConfigSettings,这个类负责从配置文件中读入软件配置参数,并把参数的值保存在成员变量中,以供后面程序进行参数读取。   但是除了原来支持的参数之外,我们又在配置文件中增加了新的配置参数,是
继续阅读

  • 当前页: 1  总页: 1

Root lee

高频与量化交易系统开发,
C++后台开发,Python爬虫开发


Student


Ukraine