内功修炼-CPU缓存基础与CPU性能优化

在计算的前几十年中,主内存非常慢且昂贵得令人难以置信,但是CPU也不是特别快。从1980年代开始,差距开始迅速扩大。微处理器的时钟速度飞速发展,但是内存访问时间的改善远没有那么明显。随着这种差距的扩大,越来越明显的是需要一种新型的快速存储器来弥合这种差距。 1980及以前:cpu没有cache 1980~1995: cpu开始有2级缓存 至今:有过L4,有些有L0,普遍有L1、L2、L3 ...

继续阅读 »

内功修炼-操作系统之文件管理和IO基础

文件系统基础 磁盘组织与管理 基础IO 在计算机操作系统中,所谓的I/O就是 输入(Input)和输出(Output),也可以理解为读(Read)和写(Write),针对不同的对象,I/O模式可以划分为磁盘IO模型和网络IO模型。 IO操作会涉及到用户空间和内核空间的转换,先来理解以下规则: 内存空间分为用户空间和内核空间,也称为用户缓冲区和内核缓冲区; 用户的应用程序不能直接操作内核空间...

继续阅读 »

内功修炼-操作系统之内存管理

计算机为什么会有内存 在计算机中, 内存作为CPU与外部存储器之间的桥梁,可以临时存放CPU中的运算数据以及与硬盘等外部存储器交换的数据。通过将常用数据存储在内存中,计算机可以更快地访问和操作这些数据,从而提高运行效率。因此内存的主要作用就是缓和CPU与硬盘之间的速度矛盾。 从图中可知, 存储器层次之间的作用和关联为金字塔形状,CPU不可以直接操控磁盘,是通过操控内存/缓存来进行工作的,因...

继续阅读 »

ECS架构与实际应用

2017年一场《守望先锋》的技术分享让我们认识到了ECS架构,ECS近年来已然成为游戏开发中比较热门的一种架构模式`。 Entity-Component-System(ECS)是一种架构模式,用于将游戏对象(实体)拆分为组件,并使用系统来处理这些组件的行为和逻辑。ECS架构模式的优点在于它提供了一种高度模块化和可扩展的方式来管理游戏对象和行为。 什么是ECS E Entity 实体,本质上...

继续阅读 »

C#的Task详解与async/await线程ID变化情况

Task详解 Task是在ThreadPool的基础上推出的。ThreadPool中有若干数量的线程(默认是CPU核心数2倍),如果有任务需要处理时,会从线程池中获取一个空闲的线程来执行任务,任务执行完毕后线程不会销毁,而是被线程池回收以供后续任务使用。当线程池中所有的线程都在忙碌时,又有新任务要处理时,线程池才会新建一个线程来处理该任务,如果线程数量达到设置的最大值,任务会排队,等待其他任...

继续阅读 »

主流热更新方案介绍(C#)

热更新 热更新分为 资源热更新 和 代码热更新 两种,代码热更新实际上也是把代码当成资源的一种热更新,但通常所说的热更新一般是指代码热更新。 资源热更新:主要通过AssetBundle来实现,在Unity编辑器内为游戏中所用到的资源指定AB包的名称和后缀,然后进行打包并上传服务器,待游戏运行时动态加载服务器上的AB资源包。 代码热更新:主要包括Lua热更新、ILRuntime热更新和C#直...

继续阅读 »

《推荐系统》基础知识

在信息系统领域里, 有两个堪称双子星的应用, 那便是搜索引擎以及推荐系统。 推荐系统与搜索引擎,有许许多多技术是重合的。那么其中区别在哪里呢? 搜索引擎是pull模式, 推荐系统是push模式。 搜索引擎是系统掌握主动权,而推荐系统则是用户掌握主动权。 搜索引擎是提供短时间的,不稳定的信息检索;而推荐系统则是提供更长时间的信息供给。 推荐系统曾经还有一个名字,叫做filtering sy...

继续阅读 »

.NET Core 常用加密和Hash工具NETCore.Encrypt

前言 在我们日常开发工作中,为了数据安全问题对数据加密、解密是必不可少的。加密方式有很多种如常见的AES,RSA,MD5,SAH1,SAH256,DES等,这时候假如我们有一个封装的对应加密解密工具类可以直接调用,那这样可以节省不少的开发时间。今天推荐一款实用的.NET Core加密解密工具类库:NETCore.Encrypt。 HASH操作 MD5加密 var srcString = "M...

继续阅读 »

并发编程模型: Actor模型

话说, 在并发编程中通常使用的两种方案是: 共享数据 与 消息传递. 使用共享数据方式的并发编程面临的最大的一个问题就是数据条件竞争,处理各种锁的问题是让人十分头痛的一件事。 基于消息传递的并发模型有CSP模型(golang)和Actor模型, 这两种模型很像, 本文只讨论Actor模型. Actor简介 Actor模型是一个通用的并发编程模型,而非某个语言或框架所有,几乎可以用在任何一门编...

继续阅读 »

.NET高性能类及其优化技巧

基础知识 一般的,结构体的实例存储在栈中,引用类型存储在托管堆中 栈:空间比较小,但是读取速度快 堆:空间比较大,但是读取速度慢 引用结构体ref struct的数据保存在栈中,因此它的读写速度非常快,另一方面,栈中的数据销毁很快,而不是像托管堆一样,交给GC去回收 在大多数情况下,连续的内存操作比非连续性的内存操作要快特别是读操作, 多线程下连续内存的写由于CPU缓存伪共享问题性能反而...

继续阅读 »

[待完成].Net异步编程的前世今生APM/EAP/TPL/async-await

异步编程模型(APM) 早在.NET Framework 1.0中,就有异步编程模型模式,又称APM模式、Begin/End模式、IAsyncResult模式。 基于事件的异步模型(EAP) .net Framework 2.0引入了一些api,实现了处理异步操作的不同模式,这种模式主要用于在客户端应用程序上下文中处理异步操作。这种基于事件的异步模式或 EAP, EAP和Synchroniz...

继续阅读 »

Mysql数据库tinyint(1)字段存0/1回显true/false解决

MySQL数据库一个表中有一个tinyint(1)类型的字段,值为0或者1,如果取出来的话,0会变成false,1会变成true。 原因: 由于MySql中没有boolean类型,所以会用到tinyint(1)类型来表示,在mysql中boolean=tinyint(1), 有些MySQL工具中显示了有boolean或bool类型, 其实也是tinyint(1)的别名 解决方案: 修改t...

继续阅读 »

c#中常用类或组件的使用场景(归纳总结)

c#中常用的池对象及其使用场景 C# 中有多个池化对象,可以通过这些对象来管理和重用内存,减少不必要的内存分配和释放开销。以下是一些常见的池化对象: ArrayPool:用于管理数组池的类,可以重复使用数组内存,避免频繁的内存分配和垃圾回收。场景:高性能网络应用程序数据包处理/异步临时缓冲/大量数组计算 ObjectPool:用于管理对象池的类,可以重复使用对象实例,避免频繁的对象创...

继续阅读 »

MacOS使用教程及开发教程

使用教程(MacOS14为准) 开启SSH远程连接macOS 系统设置 - 通用 - 共享 - 远程登录 查看隐藏文件(以.开头的文件) 使用快捷键command + shift + . 终端工具 目前MacOS中最常用的终端工具: iTerm2(终端) + oh-my-zsh(主题) iTerm2安装配置使用指南——保姆级 右键助手 在appstore中安装右键助手,并配置 开发相关 .n...

继续阅读 »

.NET Core 多线程的用法

Thread 类 ThreadPool 类 Task 类 Parallel 类 Parallel.ForEach()用于数据并行性 Parallel.Invoke()用于任务并行性 async/await 异步操作 Concurrent 类:并发集合 线程安全(多线程并发同步) 使用lock关键字使并发线程同步 使用Interlocked类使并发线程同步 使用Mutex类使并发线程同步 并发...

继续阅读 »