![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
高并发服务器
文章平均质量分 85
BBinChina
果然白痴
展开
-
交易系统开发技能及面试题之多线程并发编程(Multithreading)
文章目录概要Q概要交易系统开发技能系列的第二部分内容:并发编程多进程、多线程编程是大型系统开发必不可少的技能,这部分内容涉及各种各样的锁,死锁,线程安全思考,以及生产者消费者模式:spsc、mpmc等等。Q...原创 2021-11-23 00:18:20 · 533 阅读 · 0 评论 -
交易系统开发技能及面试之进程间通信(共享内存)
文章目录摘要Q1 当最后一个附加到共享内存的进程意外退出时,会发生什么?Q2 为什么内存共享是最快的进程通讯方式?Q3 可以在运行时调整共享内存大小么?Q4 使用mmap实现进程间通讯有什么优点?当一个进程正在写内存时会发生什么?Q5 操作系统为什么需要虚拟内存?Q6 Application Binary Interface(ABI)和 Application Programming Interface(API)的区别?摘要共享内存是进程间通信的最常用的方式,所以其在面试中也是高频知识点。通常,共享内存原创 2021-12-07 09:00:00 · 422 阅读 · 0 评论 -
交易系统开发技能及面试之无锁编程(Lock-free)
目录概要Q1 什么是atomic?Q2 alignas 关键字Q3 C++的内存模型 relaxed ordering, release-acquire ordering, sequentially consistent ordering概要这一章内容主要讲解无锁编程相关技能,在生产中,为了解决线程间资源共享问题,最常用的方式就是加锁了,这在上一章并发编程也讲到过很多。关于无锁的时候,也写过一篇无锁队列的实现,而今天这篇文章主要是讲解无锁编程所需要了解的基础知识,比如atomics,内存模型,内存排序等原创 2021-12-03 00:27:39 · 574 阅读 · 0 评论 -
c++ 高并发队列的实现
JAVA如何进行CAS讲到java的队列时,讲到java中的CAS操作回顾下java中的cas,主要采用compareAndSet方法,如AtomicReference中所使用的:AtomicRefrence.java/** * Atomically sets the value to the given updated value * if the current value {@code ==} the expected value. * @param expect原创 2021-09-11 18:25:05 · 1952 阅读 · 0 评论 -
c++11 并发队列的生产方案 BlockingConcurrentQueue
ConcurrentQueue这是我在生产中使用到的一个c++11 实现的无锁队列,有以下特性:1、线程安全的无锁队列2、支持c++11 的move语义,优化对象拷贝性能3、模板化4、可预分配内存、也可动态分配5、支持批量处理6、包含阻塞队列7、异常安全demo将github里的文件 Blockingconcurrentqueue.h 跟 Concurrentqueue.h 加载到项目中#include "Blockingconcurrentqueue.h"//声明队列moody原创 2021-09-09 23:50:01 · 1922 阅读 · 0 评论 -
Java 无锁队列 Disruptor,内存队列的生产解决方案
背景Disruptor是英国外汇交易所LMAX开源的用于生产交易中的内存队列。为了实现高性能交易撮合队列时,现在普遍的交易撮合引擎都采用了内存队列的方式,这种方式减少了持久化过程中带来的磁盘IO延迟,可以提交整体的交易性能。Disruptor便是这样场景中诞生的,在实际使用过程中,LMAX基于Disruptor开发的系统单线程能支撑每秒600万订单。Java队列内存队列通常用于内存共享场景下的,而共享内存与锁有必然分不开的情缘,在java内置的线程安全的队列有以下:队列有界性锁数据原创 2021-09-08 00:10:40 · 1543 阅读 · 2 评论 -
使用SO_LINGER缩短TIME_WAIT的时间,减少大量短链接堆积TIME_WAIT
经常会听到socket的优雅关闭问题:struct linger { int l_onoff; /* 0 = off, nozero = on */ int l_linger; /* linger time */};setsockopt(m_listenfd, SOL_SOCKET, SO_LINGER, &tmp, sizeof(tmp));通过setsockopt方法设置socket的配置项SO_LINGER何为优雅:SO_LINGER选项用来设置延原创 2021-09-03 00:02:54 · 362 阅读 · 0 评论 -
linux网络编程实践:关闭链接存在的问题 TIME_WAIT的2MSL等待
问题描述:主动关闭socket的一方在time_wait需要等待2MSL(默认2分钟)原因分析:可以看到主动关闭的客户端在最后一个TIME_WAIT时,客户端跟服务端实际上已经做了关闭socket的动作(中断上层应用 对send 或recv时抛出 socket error)。当服务端发送FIN时,表示已经进行close socket,并进入LAST_ACK状态,在这个状态下,服务端TCP会在2TTL(一去一回)时间内检测是否触发重传机制客户端对FIN 进行ack,这个时候进入TIME_WAIT来原创 2021-09-01 00:47:20 · 330 阅读 · 0 评论 -
C++ Actor并发模型框架 Actor Framework (CAF)
什么是ACTOR 并发模型Actor 是一种处理并发计算的基本模型,主要概念是通过OO 面向对象思想,将计算单元独立成一个对象,在模型中成为Actor,各个独立计算单元之间的通信通过mailbox(邮箱),每个Actor维护自己的mailbox,mailbox存储的是需要消费的消息。这里扩散一下知识,在更早期出现的ESB(enterprise service bus)企业服务总线模型是将服务接到消息总线上,服务获取总线上投递给他的消息。这种方式存在耦合,以及需要一个个服务进行确认,直到消费者进行确认消原创 2021-06-04 00:24:25 · 4651 阅读 · 2 评论 -
c++ 网络编程 之socket
服务器开发最核心的部分有网络编程即网络IO管理网络应用依赖于很多系统研究中已经学习过的概念,例如,进程、信号、字节顺序、存储器映射以及动态存储分配,接下来的文章主要内容为理解基本的客户端-服务器编程模型,实现编写一个web服务器。客户端 - 服务器编程模型网络 socket编程网络应用依赖于很多系统研究中已经学习过的概念,例如,进程、信号、字节顺序、存储器映射以及动态存储分配,接下来的文章主要内容为理解基本的客户端-服务器编程模型,实现编写一个web服务器。客户端 - 服务器编程模型俗称的cs架构,基原创 2021-03-21 22:24:00 · 281 阅读 · 0 评论