cfd

Redis源码阅读(一)事件机制

Deadly 提交于 2020-03-15 04:24:54
Redis 源码阅读(一)事件机制   Redis 作为一款 NoSQL 非关系内存数据库,具有很高的读写性能,且原生支持的数据类型丰富,被广泛的作为缓存、分布式数据库、消息队列等应用。此外 Redis 还有许多高可用特性,包括数据持久化,主从模式备份等等,可以满足对数据完整性有一定要求的场景。   Redis 的源码结构简单清晰,有大量材料可以参阅;通过阅读 Redis 源码,掌握一些常用技术在 Redis 中的实现,相信会对个人编程水平有很大帮助。这里记录下我阅读 Redis 源码的心得。从我自己比较关心的几个技术点出发,每个技术点都是来自个人使用 Redis 过程中产生的问题。这里也参考了黄建宏老师的《 Redis 设计与实现》部分内容,不得不说参考这本书再结合源码注释,看起来绝对事半功倍。   当初选用 Redis 的时候,很大程度上是由于 Redis 的并发性能很高,可以支持大量并发请求。那 Redis 是如何支持高并发请求的呢?这里就引入了第一个技术点,事件处理机制。在 Redis 中使用了单线程的 Reactor 模式,属于 I/O 多路复用的一种常见实现模式。这里简单介绍下 Reactor 模式。 1. Reactor 模式 从网上切一个类图,简单描述一下Reactor模式的主体结构 基本概念: Handle : I/O 操作的基本文件句柄,在 linux 下就是

【小白的CFD之旅】01 引子

自古美人都是妖i 提交于 2020-02-16 07:50:09
小白的CFD之旅 写在前面 CFD是 计算流体力学 的英文简称,是计算机辅助工程( CAE )的主要分支,目前广泛应用与科学研究、工程设计中。这是一门综合了 数学 、 计算机 及 流体力学 的综合学科,涉及到众多的专业理论,如果缺少相应的专业基础,要想将CFD应用于工程中则需要花费较多的时间。 CFD工程应用主要涉及到以下几个方面: 力学建模 :将现实世界中的物理现象抽象为计算机能够识别的力学模型。这部分在CFD应用中是最为重要的一步,然而在实际工作中常常被忽略。力学建模要求CFD应用者具备良好的流体力学理论功底。只有具备良好的理论素质,才能够准确的把握现象的本质,而不至于造成因为不必要的细节而舍去核心本质。 数值计算 :将力学模型转化为计算机可求解计算的代数方程组以及代数方程组的数值求解。力学建模通常得到的是微分方程,除非一些特别简单的物理现象,否则这些微分方程基本上很难得到解析解。CFD通常采用的是数值求解技术,通过离散化技术将微分方程转化为计算机容易求解的代数方程。 网格生成 :数值计算过程中的数值离散技术通常要用到计算网格。我们将连续的求解域切割成离散的小的空间的过程称之为网格生成。生成高质量的网格是优质计算的前提。 计算结果解释 :计算机求解代数方程后获取的是计算域空间上所有节点上的物理量的值,为了更好地利用计算结果,通常将数值计算结果以图形图表的形式进行展示。

高并发多路IO之select,poll和epoll模型区别与代码实现

≡放荡痞女 提交于 2020-01-28 07:53:34
多路IO之select 优点:单进程下支持高并发,可以跨平台 缺点:多次从内核到应用,应用到内核的数组拷贝;    每次内核都会重置填写的数据    最大支持1024客户端,原因在于fd_set定义使用了FD_SETSIZE,大小为1024; 以下是select模型server代码: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <sys/socket.h> #include <sys/wait.h> #include <netinet/in.h> #include <errno.h> #include <fcntl.h> #include <sys/select.h> #include <ctype.h> int main(){ int lfd = socket(AF_INET,SOCK_STREAM,0); struct sockaddr_in serv; bzero(&serv,sizeof(serv)); serv.sin_port = htons(8888); serv.sin_family = AF_INET; serv.sin_addr.s_addr

如何使用C++实现简单的TCP服务器的编写

 ̄綄美尐妖づ 提交于 2020-01-07 16:31:51
简单的TCP服务器实现 #include <stdio.h> #include <ctype.h> #include <sys/socket.h> #include <arpa/inet.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <errno.h> #include <pthread.h> #define SERVER_PORT 7000 void sys_err(const char *str) { perror(str); exit(1); } int main(int agrc, char *argv[]){ int ret; char buf[BUFSIZ]; // 创建文件描述符 int lfd = 0, cfd=0; // 创建addr地址的结构体 struct sockaddr_in server_addr, client_addr; socklen_t client_addr_len; server_addr.sin_family = AF_INET; server_addr.sin_port = htons(SERVER_PORT); server_addr.sin_addr.s_addr = htonl(INADDR_ANY); // 创建socket lfd

如何使用C++实现简单的TCP服务器的编写

蓝咒 提交于 2020-01-05 06:36:31
简单的TCP服务器实现 #include <stdio.h> #include <ctype.h> #include <sys/socket.h> #include <arpa/inet.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <errno.h> #include <pthread.h> #define SERVER_PORT 7000 void sys_err(const char *str) { perror(str); exit(1); } int main(int agrc, char *argv[]){ int ret; char buf[BUFSIZ]; // 创建文件描述符 int lfd = 0, cfd=0; // 创建addr地址的结构体 struct sockaddr_in server_addr, client_addr; socklen_t client_addr_len; server_addr.sin_family = AF_INET; server_addr.sin_port = htons(SERVER_PORT); server_addr.sin_addr.s_addr = htonl(INADDR_ANY); // 创建socket lfd

IPC-本地套接字

邮差的信 提交于 2019-11-26 02:04:43
一。Unix domain socket概念   socket API原本是为网络通讯设计的,但后来在socket的框架上发展出一种IPC机制,就是UNIX Domain Socket。虽然网络socket也可用于同一台主机的进程间通讯(通过loopback地址127.0.0.1),但是UNIX Domain Socket用于IPC更有效率:不需要经过网络协议栈,不需要打包拆包、计算校验和、维护序号和应答等,只是将应用层数据从一个进程拷贝到另一个进程。这是因为,IPC机制本质上是可靠的通讯,而网络协议是为不可靠的通讯设计的。   UNIX Domain Socket是全双工的,API接口语义丰富,相比其它IPC机制有明显的优越性,目前已成为使用最广泛的IPC机制,比如X Window服务器和GUI程序之间就是通过UNIXDomain Socket通讯的。 二。本地套接字地址结构 struct sockaddr_un { __kernel_sa_family_t sun_family ; /* AF_UNIX */ 地址结构类型 char sun_path [UNIX_PATH_MAX]; /* pathname */ socket文件名(含路径) }; 三。代码示例 服务端 1 #include <stdio.h> 2 #include <unistd.h> 3 #include