- 博客(71)
- 收藏
- 关注
原创 【游戏框架】多进程服务器
CrossData是静态对象,主要作用是用于存储role_all_struct的std::map CrossUserList,即跨服的角色数据的map。NetListen/NetConnect/NetSend/NetDisconnect,实际用到的是m_internal_network里面的方法。NetListen/NetConnect/NetSend/NetDisconnect,实际用到的是m_internal_network里面的方法。
2024-10-30 13:54:13
992
原创 【计算机图形学】计算机图形学笔记
在计算机图形学中,渲染流水线的各个阶段都有其特定的任务和计算设备。应用阶段是否将数据从内存准备到显存中?是的,在应用阶段,数据确实会从内存(如系统内存RAM)准备到显存(如VRAM)中。这是因为显卡对显存的访问速度远快于对系统内存的访问,且显卡通常没有直接访问系统内存的能力(或访问速度极慢)。因此,在渲染开始前,CPU会将所有必要的渲染数据(如网格、纹理、顶点信息等)从硬盘加载到系统内存中,然后再将这些数据复制到显存中,以便GPU在渲染过程中能够高效地访问这些数据。
2024-09-07 00:59:28
773
原创 【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
484
原创 【日志模块】log4cpp、moduo日志模块实现
日志面试:日志库怎么提高性能:文件批量写入批量唤醒写线程写线程用notify+wait_timeout的方式刷磁盘控制锁的粒度:双缓冲(current_buff(缓存4M)、buffer(一个vector,缓存多个current_buff))、双队列(队列1:接收数据的队列。队列2:刷磁盘的队列)程序崩溃,日志没有及时写入,是否能找回根据时间戳找到丢失的日志...
2024-06-28 12:22:12
260
原创 【游戏业务逻辑】Lua 状态机与行为树
状态机将会按照"state1" -> “state2” -> “state3” -> "state1"的顺序无限循环,因为每个状态的处理函数最后都调用了end_running来过渡到下一个状态,并且没有明确的终止条件。如上,随机了两个初始行为树节点的id,代表两个行为树链条,只需要在行为树路径表里配置好两个行为树链条即可。
2024-06-14 01:35:18
950
原创 【深度学习】深度学习名词概念解释
RNN(循环神经网络)具有如下所示的循环结构的网络。如上所示的循环结构使RNN的输出前馈到自身,因此,RNN网络拥有“状态”。
2024-05-30 12:07:41
1423
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
1329
原创 【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
1207
原创 【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
1487
原创 【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
557
原创 【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
868
原创 【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
937
原创 【Mysql】Mysql视图、触发器、存储过程、游标
Mysql视图、触发器、存储过程一、视图定义优点语法准备作用二、触发器定义4要素语法准备NEW 和 OLD案例三、存储过程定义特点语法案例四、游标定义游标打开游标取游标数据关闭游标释放设置游标结束标志案例一、视图定义视图(view)是一种虚拟存在的表,是一个逻辑表,本身并不包含数据。其内容由查询定义。基表:用来创建视图的表叫做基表;通过视图,可以展现基表的部分数据;视图数据来自定义视图的查询中使用的表,使用视图动态生成;优点简单:使用视图的用户完全不需要关心后面对应的表的结构、关联条件和筛选
2022-09-03 20:06:16
891
原创 【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
526
原创 【Mysql】事务、锁、MVCC、redo、undo、binlog
事务目的事务将数据库从一种一致性状态转换为另一种一致性状态;组成事务可由一条SQL语句组成,也可以由一组复杂的SQL语句组成;注意一条SQL语句也是一个事务;特征在数据库提交事务时,可以确保要么所有修改都已经保存,要么所有修改都不保存;事务是访问并更新数据库各种数据项的一个程序执行单元。在 MySQL innodb 下,每一条语句都是事务;可以通过 set autocommit = 0; 设置当前会话手动提交;事务控制语句-- 显示开启事务 START TRANSACTION |
2022-09-03 20:05:34
756
原创 【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
525
原创 【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
556
原创 【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
475
原创 【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
1411
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
600
原创 【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
2788
原创 【消息队列】消息队列
消息队列什么是消息队列使用消息队列的场景1. 异步处理2. 流量控制(削峰)3. 服务解耦4. 发布订阅5. 高并发缓冲消息队列-基本概念和原理1. Broker2. 消息的生产者、消费者3. 点对点消息队列模型4. 发布订阅消息模型-Topic5. 消息的顺序性保证6. 消息的ACK确认机制7. 消息的持久化8. 消息的同步和异步收发可供选择的消息队列产品什么是消息队列消息+队列(MessageQueue,简称MQ)。本质是就是个队列,FIFO先入先出,只不过队列中存放的内容是message,从而叫
2022-03-20 16:25:08
176
原创 【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
1520
原创 【Linux进程】Linux进程
程序和进程程序,是指编译好的二进制文件,在磁盘上,不占用系统资源(cpu、内存、打开的文件、设备、锁…)进程,是一个抽象的概念,与操作系统原理联系紧密。进程是活跃的程序,占用系统资源。在内存中执行。(程序运行起来,产生一个进程)程序 → 剧本(纸) 进程 → 戏(舞台、演员、灯光、道具…)同一个剧本可以在多个舞台同时上演。同样,同一个程序也可以加载为不同的进程(彼此之间互不影响)如:同时开两个终端。各自都有一个bash但彼此ID不同。并发并发,在操作系统中,一个时间段中有多个进程都处于已启动
2022-02-21 01:09:08
436
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人