- 博客(70)
- 收藏
- 关注
原创 【CMake】windows平台cmake编译一个sfml项目
经过上面的步骤,就可以打开sln了,然后编译项目,最后运行debug,发现提示缺少dll,最后,我们将SFML所有dll复制到项目的debug执行目录下就可以了。发现他的查找逻辑其实一般是在linux系统里找FSML路径的,但是我们可以利用${SFML_ROOT}这个变量,设置为我们SFML库的windows路径。点击environment,然后设置上面我们提到的变量,key设置为SFML_ROOT,value设置为我们的SFML路径。然后点击configure,点击generate,最后生成sln。
2024-08-10 13:13:56
288
原创 【日志模块】log4cpp、moduo日志模块实现
日志面试:日志库怎么提高性能:文件批量写入批量唤醒写线程写线程用notify+wait_timeout的方式刷磁盘控制锁的粒度:双缓冲(current_buff(缓存4M)、buffer(一个vector,缓存多个current_buff))、双队列(队列1:接收数据的队列。队列2:刷磁盘的队列)程序崩溃,日志没有及时写入,是否能找回根据时间戳找到丢失的日志...
2024-06-28 12:22:12
206
原创 【游戏业务逻辑】Lua 状态机与行为树
状态机将会按照"state1" -> “state2” -> “state3” -> "state1"的顺序无限循环,因为每个状态的处理函数最后都调用了end_running来过渡到下一个状态,并且没有明确的终止条件。如上,随机了两个初始行为树节点的id,代表两个行为树链条,只需要在行为树路径表里配置好两个行为树链条即可。
2024-06-14 01:35:18
721
原创 【深度学习】深度学习名词概念解释
RNN(循环神经网络)具有如下所示的循环结构的网络。如上所示的循环结构使RNN的输出前馈到自身,因此,RNN网络拥有“状态”。
2024-05-30 12:07:41
1094
1
原创 【性能】什么是CPU密集型计算、IO密集型计算与多进程、多线程、多协程
CPU密集型(CPU-bound)CPU密集型也叫计算密集型,是指I/O在很短的时间就可以完成,CPU需要大量的计算和处理,特点是CPU占用率相当高例如:压缩解压缩、加密解密、正则表达式搜索IO密集型(I/O bound)IO密集型指的是系统运作大部分的状况是CPU在等I/O(硬盘/内存)的读写操作,CPU占用率任然较低。例如:文件处理程序、网络爬虫程序、读写数据库程序。
2023-08-17 23:18:21
810
原创 【Nginx】nginx应用入门
下载与编译环境:CentOS71 下载下载nginx源码:https://github.com/nginx/nginxnginx编译需要pcre,下载pcre:https://github.com/PhilipHazel/pcre2nginx编译需要zlib,下载zlib:https://github.com/madler/zlib2 解压解压pcre:tar -zxvf pcre-8.41解压zlib:tar -zxvf zlib-1.2.11解压nginx:tar
2022-10-06 00:18:06
870
原创 【Nginx】Nginx新增自定义模块
系统环境[root@localhost nginx]# uname -aLinux localhost.localdomain 3.10.0-1160.el7.x86_64 #1 SMP Mon Oct 19 16:18:59 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux业务模块实现一个统计客户端查看资源次数的业务模块。创建目录[root@localhost nginx]# cd /home/ronghui/nginx/[root@localhost ngi
2022-10-06 00:17:35
1167
原创 【Redis】源码分析、redis模块扩展、redisbloom
源码分析、redis模块扩展、redisbloom一、字典实现数据结构冲突扩容缩容渐进式rehashscan(间断)expire机制大KEY二、跳表实现理想跳表redis跳表应用延时队列优化思路三、Redis扩展本质入口函数API以及数据结构四、RedisBloom接口测试部署五、hyperloglog本质原理问题1问题2算法去重存储测试六、漏斗限流Redis-Cell一、字典实现redis DB KV组织是通过字典来实现的;hash结构当节点超过 512 个或者单个字符串长度大于 64 时,hash结
2022-09-05 17:08:14
450
原创 【Redis】持久化、主从复制、cluster集群
持久化、主从复制、cluster集群一、Redis持久化Redis持久化相关的配置aof(append only file)恢复配置策略缺点aof rewrite配置策略缺点rdb配置策略缺点混合持久化配置应用数据安全策略二、Redis 主从复制命令数据同步全量数据同步增量数据同步服务器 RUN ID复制偏移量 offset环形缓冲区(复制积压缓冲区)三、Redis 哨兵模式配置检测异常主观下线客观下线故障转移缺点四、Codis 集群五、Redis cluster集群数据迁移复制以及故障转移故障检测故障转移
2022-09-05 17:07:57
460
原创 【Redis】事务、lua脚本、发布订阅、异步连接
事务、lua脚本、发布订阅、异步连接一、redis事务redis事务命令redis事务与mysql事务的区别redis事务应用二、lua脚本实现事务EVALEVALSHA应用ACID特性分析三、redis 发布订阅注意缺点应用四、redis异步连接redis协议图异步连接redis6.0 io多线程原理开启实现方案hiredis + libevent自定义实现协议解压缩协议压缩一、redis事务MULTI 开启事务,事务执行过程中,单个命令是入队列操作,直到调用 EXEC 才会一起执行;redis事务
2022-09-05 17:07:44
618
原创 【Mysql】Mysql视图、触发器、存储过程、游标
Mysql视图、触发器、存储过程一、视图定义优点语法准备作用二、触发器定义4要素语法准备NEW 和 OLD案例三、存储过程定义特点语法案例四、游标定义游标打开游标取游标数据关闭游标释放设置游标结束标志案例一、视图定义视图(view)是一种虚拟存在的表,是一个逻辑表,本身并不包含数据。其内容由查询定义。基表:用来创建视图的表叫做基表;通过视图,可以展现基表的部分数据;视图数据来自定义视图的查询中使用的表,使用视图动态生成;优点简单:使用视图的用户完全不需要关心后面对应的表的结构、关联条件和筛选
2022-09-03 20:06:16
515
原创 【Mysql】主从复制、读写分离方案
主从复制主库更新事件(update、insert、delete)通过io-thread写到binlog;从库请求读取binlog,通过io-thread写⼊(write)从库本地 relay log(中继⽇志);从库通过sql-thread读取(read) relay log,并把更新事件在从库中执⾏(replay)⼀遍;读写分离mysql与缓冲数据库前提读多写少,单个主节点能⽀撑项⽬数据量;数据的主要依据是mysql;mysql缓冲层mysql有缓冲层,它的作⽤也是⽤来缓存热点
2022-09-03 20:05:46
274
原创 【Mysql】事务、锁、MVCC、redo、undo、binlog
事务目的事务将数据库从一种一致性状态转换为另一种一致性状态;组成事务可由一条SQL语句组成,也可以由一组复杂的SQL语句组成;注意一条SQL语句也是一个事务;特征在数据库提交事务时,可以确保要么所有修改都已经保存,要么所有修改都不保存;事务是访问并更新数据库各种数据项的一个程序执行单元。在 MySQL innodb 下,每一条语句都是事务;可以通过 set autocommit = 0; 设置当前会话手动提交;事务控制语句-- 显示开启事务 START TRANSACTION |
2022-09-03 20:05:34
398
原创 【Mysql】Mysql索引
一、索引主键索引非空唯一索引,一个表只有一个主键索引;在 innodb 中,主键索引的B+树包含表数据信息;PRIMARY KEY(key)唯一索引不可以出现相同的值,可以有NULL值;UNIQUE(key)普通索引允许出现相同的索引内容;INDEX(key) -- OR KEY(key[,...])组合索引对表上的多个列进行索引INDEX idx(key1,key2[,...]); 、UNIQUE(key1,key2[,...]); PRIMARY KEY(key1,
2022-09-03 20:05:21
294
原创 【Mysql】Mysql查询
MYSQL查询MYSQL高级查询数据准备CREATE TABLE IF NOT EXISTS `student` ( `id` INT UNSIGNED AUTO_INCREMENT COMMENT '编号', `name` VARCHAR(100) NOT NULL COMMENT '姓名', `age` TINYINT NOT NULL COMMENT '年龄', `sex` TINYINT NOT NULL COMMENT '性别(1:男;2:女)', `score` SMA
2022-09-03 20:05:04
341
原创 【skynet】skynet阻塞接口的原理剖析
skynet阻塞接口的原理剖析:假设在lua代码中调用如下接口:local res, err = socket.open("127.0.0.1", 6379)if not res then print(err)else print("hello")end即调用到C代码的driver.open,然后调用local function connect的suspend函数挂起当前协程,等待connect返回信息。local function connect(id, func) local ne
2022-08-28 16:55:46
361
原创 【skynet】skynet消息处理与协程
首先看skynet.start函数,通过c.callback设置了回调函数skynet.dispatch_message。然后看skynet.dispatch_message函数,第一句pcall调用了函数raw_dispatch_message函数。然后看raw_dispatch_message函数,注意到local co = co_create(f)创建了一个协程。local function raw_dispatch_message(prototype, msg, sz, session,
2022-08-28 16:55:36
1076
1
原创 【skynet】skynet入口解析
skynet源码解读一、skynet网络线程入口网络线程入口函数如下,调用函数socket_server_poll创建多路复用IO监听socket IO事件。//skynet_start.cstatic void *thread_socket(void *p) { struct monitor * m = p; skynet_initthread(THREAD_SOCKET); for (;;) { int r = skynet_socket_poll(); if (r==0)
2022-08-28 16:52:48
422
原创 【ZeroMQ】ZeroMQ入门
消息队列与ZeroMQ【push-pull】 模型与 【pub-sub】 模型的区别【push-pull】 模型与 【pub-sub】 模型的区别push-pull模型中,client发的消息,不同server接收指定的msg进行消费。类似于多线程从全局队列取消息模型。pub-sub模型中,client发的消息,不同的server均接收所有的msg进行消费。...
2022-03-20 16:45:58
1973
原创 【消息队列】消息队列
消息队列什么是消息队列使用消息队列的场景1. 异步处理2. 流量控制(削峰)3. 服务解耦4. 发布订阅5. 高并发缓冲消息队列-基本概念和原理1. Broker2. 消息的生产者、消费者3. 点对点消息队列模型4. 发布订阅消息模型-Topic5. 消息的顺序性保证6. 消息的ACK确认机制7. 消息的持久化8. 消息的同步和异步收发可供选择的消息队列产品什么是消息队列消息+队列(MessageQueue,简称MQ)。本质是就是个队列,FIFO先入先出,只不过队列中存放的内容是message,从而叫
2022-03-20 16:25:08
145
原创 【Tcp】TCP连接中存在大量TIME_WAIT、CLOSE_WAIT的原因【转】
TCP通信图TIME_WAIT表示客户端主动关闭socket。原因:大量的短连接存在特别是 HTTP 请求中,如果 connection 头部取值被设置为 close 时,基本都由服务端发起主动关闭连接TCP 四次挥手关闭连接机制中,为了保证 ACK 重发和丢弃延迟数据,设置 time_wait 为 2 倍的 MSL(报文最大存活时间)后果:TCP 连接中,「主动发起关闭连接」的一端,会进入 time_wait 状态time_wait 状态,默认会持续 2 MSL(报文的最大生存时
2022-02-21 01:09:25
1195
原创 【Linux进程】Linux进程
程序和进程程序,是指编译好的二进制文件,在磁盘上,不占用系统资源(cpu、内存、打开的文件、设备、锁…)进程,是一个抽象的概念,与操作系统原理联系紧密。进程是活跃的程序,占用系统资源。在内存中执行。(程序运行起来,产生一个进程)程序 → 剧本(纸) 进程 → 戏(舞台、演员、灯光、道具…)同一个剧本可以在多个舞台同时上演。同样,同一个程序也可以加载为不同的进程(彼此之间互不影响)如:同时开两个终端。各自都有一个bash但彼此ID不同。并发并发,在操作系统中,一个时间段中有多个进程都处于已启动
2022-02-21 01:09:08
307
原创 【GCC/G++】gcc/g++入门
GCC/G++ 编译过程示例代码head.h#ifndef __HEAD_H__#define __HEAD_H__#define NUM1 10#define NUM2 20#endifsum.c#include <stdio.h>#include "head.h"//#define DEBUGint main(void){ int a = NUM1; int aa; int b = NUM2; int sum = a + b
2022-02-21 01:07:38
701
原创 【Mysql】C++远程连接Mysql示例
Window远程连接Linux上Mysql实例(c++)一、WINDOW上连接LINUX的MYSQL数据库二、MYSQL建模与建库建表三、C++数据库编程(插入,删除,存储)四、C++数据库编程-图片存储一、WINDOW上连接LINUX的MYSQL数据库linux上修改mysql的配置文件(ubuntu配置在/etc/mysql/my.cnf,centos配置在/etc/my.cnf)//window上连接linux数据库时,出现10061错误码,原因是回环地址错误,以下解决:1.[ubuntu]
2022-02-07 01:56:30
1061
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人