操作系统
游戏猫
多年游戏开发经验,在这里分享经验和心得
展开
-
Debian11镜像源
腾讯云镜像站deb https://mirrors.tencent.com/debian/ bullseye main non-free contribdeb-src https://mirrors.tencent.com/debian/ bullseye main non-free contribdeb https://mirrors.tencent.com/debian-security/ bullseye-security maindeb-src https://mirrors.tencent原创 2022-02-23 10:56:29 · 2416 阅读 · 0 评论 -
硬件性能总结
CPU:频率3GHZ,一个指令周期耗时,0.3纳秒。CPU Cache L1:耗时1纳秒,相当于3个指令周期。CPU Cahe L2:耗时5纳秒,相当于15个指令周期。CPU Cahe L3:耗时13纳秒,相当于40个指令周期。DDR3:频率1.333GHZ,每秒最大内存读取速度8GB/s。读取一次耗时60纳秒,约180个指令周期(实际会一次取多个数据缓存到CPU Cache里),耗时高不是由于DDR3的速度慢,而是内存到CPU的线路传输耗时长。DDR4:频率2.666GHZ,每秒最大内存读取速原创 2020-08-19 01:48:14 · 255 阅读 · 0 评论 -
unique_lock使用示例、源码分析
一、概要unique_lock实现了lock_guard类似的功能,但unique_lock保证了只有一个unique_lock拥有mutex,同时提供了转移拥有权的接口。二、代码示例#pragma once#include <mutex>#include <thread>#include <iostream>using namespace std;class UniqueLockTest{private: mutex _mutex; int co原创 2020-07-18 00:06:34 · 513 阅读 · 3 评论 -
promise使用示例
一、概要promise实现跨线程设置和获取值,底层使用了mutex来保证设置值的原子性,通过future实现了跨线程等待获取结果。二、代码#pragma once#include <future>#include <thread>#include <chrono>#include <iostream>using namespace std;class PromiseTest{private: promise<int> p;原创 2020-07-14 00:06:25 · 226 阅读 · 0 评论 -
C++future、async使用示例
一、概述async可以启动一个线程(不保证)来处理逻辑,async调用后悔返回一个future,通过future可以用来等待处理完成或查看处理进度。二、代码#pragma once#include <future>#include <chrono>using namespace std;class AsyncTest{private: int count = 0; int maxLoop = 2000000000;public: int process()原创 2020-07-13 00:57:06 · 625 阅读 · 0 评论 -
SpinLock源码
一、概要spinLock的基本原理是如果发现其他人锁着,就一直循环,知道其他人解锁后,再上锁。一般SpinLock适用于锁的时间很短的情况,通过不断判定是否可以加锁,避免适用Mutex这类操作系统锁带来不能锁定时的上下文切换。二、实现源码#pragma once#include <atomic>#include <thread>using namespace std;class SpinLock{private: atomic<bool> _flag;原创 2020-07-12 01:29:39 · 317 阅读 · 1 评论 -
Atomic、Mutex性能测试
一、结论1、Atomic、Mutex相对于不加锁有较大的性能差别。2、Mutex的性能开销是Atomic的两倍左右。二、测试代码#pragma once#include <atomic>#include <thread>#include <chrono>using namespace std;class AtomicTest{private: atomic<long long> atomicCount=0; long long nor原创 2020-07-10 00:32:19 · 730 阅读 · 0 评论 -
IO多路复用之select详解
一、select用户select是 I/O多路复用系统函数,用来等待文件描述符状态的改变。它会一直阻塞,直到一个或多个文件描述符集合称为就绪态或者指定一个超时时间。它不适合文件数量庞大、I/0流量频繁的时候,它会随着fd的数量增大性能下降明显。二、接口windows定义:int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, const struct timeval *timeout)linux定义:原创 2020-05-22 01:55:04 · 1431 阅读 · 0 评论 -
32位进程地址空间
对于一个进程,其空间分布如下图所示:保留区: 位于地址空间的最低部分(大概100来M),未赋予物理地址。任何对它的引用都是非法的,用于捕捉使用空指针和小整型值指针引用内存的异常情况。会放些动态链接库等。程序段: 代码段也称正文段或文本段,通常用于存放程序执行代码(即CPU执行的机器指令)。初始化过的数据(Data Segment): 用于存放程序中已初始化且初值不为0的全局变量和静态局部变...原创 2020-03-23 00:42:47 · 1515 阅读 · 0 评论 -
CPU主要寄存器功能说明
AX:累加器BX:基址寄存器(Base)CX:计数(Count)循环时自动加1DX:存放数据(Data)IP:指令寄存器存放下一条将要执行指令的偏移量,加上代码段的基地址形成下一条指令的地址。SI( Source Index register):源变址寄存器。DI( Destination Index Register):目的变址寄存器。SP:堆栈指针(Stack Pointer),...原创 2020-03-08 09:33:33 · 1834 阅读 · 0 评论 -
C++条件变量condition_variable使用方法
一、条件变量概述条件变量可以实现一个线程唤醒一个或多个其他等待中的线程,实现线程间的同步。生产者消费者模型就可以用条件变量来实现。二、条件变量示例源码#pragma once#include <mutex>#include <condition_variable>#include <chrono>#include <queue>us...原创 2020-03-01 10:15:45 · 950 阅读 · 0 评论 -
查看CPU的Cache信息
一、用以下指令可以查看各级cache大小cat /sys/devices/system/cpu/cpu0/cache/index0/size32Kcat /sys/devices/system/cpu/cpu0/cache/index1/size32Kcat /sys/devices/system/cpu/cpu0/cache/index2/size1024Kcat /sys/dev...原创 2019-08-20 01:09:09 · 1374 阅读 · 0 评论 -
Linux下CPU信息查看
查看物理CPU个数cat /proc/cpuinfo| grep “physical id”| sort| uniq| wc -l查看每个物理CPU中core的个数(即核数)cat /proc/cpuinfo| grep “cpu cores”| uniq查看逻辑CPU的个数cat /proc/cpuinfo| grep “processor”| wc -l查看CPU信息(型号)ca...原创 2018-10-24 10:38:05 · 228 阅读 · 0 评论 -
Linux网络指令汇总
1、ifconfig 显示网卡信息2、ping 查看与目标机器的网络是否通畅,还可以用来测试丢包率,延迟ping 192.168.0.13、telnet 看是否可以连上目标机器和端口telnet 127.0.0.1 804、traceroute 查看到目标机器的路由信息traceroute www.baidu.com5、curl 访问一个http地址,获得返回结果curl ...原创 2019-07-30 11:20:04 · 186 阅读 · 0 评论 -
Linux虚拟内存
一、虚拟内存定义虚拟内存是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间)。二、其他概念逻辑地址是指CPU所生产的的地址物理地址支持实际内存的地址三、虚拟内存技术的实现虚拟内存实际是通过分页方法来实现的。分页技术会将物理内存分为固定大小的块,称为帧。逻辑内存也分为相同大小的块,成为页。帧或页的小小一般是4KB,这个是由硬件决定,而分...原创 2019-07-14 01:32:04 · 256 阅读 · 0 评论 -
线程同步机制
线程同步主要用于协调对临界资源的访问,临界资源可以是硬件设备(比如打印机)、磁盘(文件)、内存(变量、数组、队列等)。线程同步有4种机制:临界区互斥量事件信号量他们的主要区别在于:适用范围:临界区在用户模式下,不会发生用户态到内核态的切换,只能用于同进程内线程间同步。其他会导致用户态到- 内核态的切换,利用内核对象实现,可用于不同进程间的线程同步。性能:临界区...原创 2018-06-24 01:08:04 · 5860 阅读 · 0 评论