.NET
文章平均质量分 83
kylinok
这个作者很懒,什么都没留下…
展开
-
ET9中ETTask传递新的Context原理
ET9作者猫大的创新以及设计能力确实强,新版的ETTask也确实牛逼,有了上下文确实能搞出很多花样了。原创 2024-06-27 18:19:47 · 850 阅读 · 2 评论 -
【无标题】
记住:IL评价堆栈,用于操作IL指令对应的语法树节点,并不是真正运行IL指令,而是用于构造基于IL指令对应的语法树结构,通过评价堆栈的方式,连接这些单独的IL指令对应的语法树节点,构建成树结构,然后存入到基础块中(最终构建成为HIR结构),方便后续变为LIR,汇编,机器指令。所以从抽象层面看,也可以理解为是在运行IL指令(毕竟后续的逻辑都是根据它生成的)...原创 2022-07-09 08:49:56 · 116 阅读 · 0 评论 -
.Net填坑,C#中的async,await以及编译器给我们做了什么,后面细化再排版
要点:1.函数增加async之后,就会编译器就会帮我我们生成一个状态机代码static async void BBB() { Console.WriteLine("123"); }编译器帮助生成的[AsyncStateMachine(typeof (Program.\u003CBBB\u003Ed__5))] [DebuggerStepThrough] private static void BBB(原创 2022-01-21 14:39:09 · 1086 阅读 · 0 评论 -
C#与CLR填坑之out,ref,in方法参数
C#与CLR填坑之out,ref,in方法参数文章目录C#与CLR填坑之out,ref,in方法参数普通传递方式按引用传递方式总结普通传递方式首先看微软官方文档的说明中的一句话:为不具有 in、ref 或 out 的方法声明的参数会按值传递给调用的方法。CLR方法默认都是按值传递,可能就会有疑问了,那下面这种也是按值传递? class Program { static void Main(string[] args)原创 2021-09-15 10:15:00 · 776 阅读 · 1 评论 -
ET6.0服务器框架学习笔记(三、一条内网actor消息)
ET6.0服务器框架学习笔记(三、一条内网actor消息)上篇文章对协议的写法,最简单的一条登录协议使用作为分析对象,本篇针对内网服务器之间的一条actor消息进行使用解析:R2G_GetLoginKey协议文章目录ET6.0服务器框架学习笔记(三、一条内网actor消息)一、内网普通Actor协议流程1、R2G_GetLoginKey协议的作用2、R2G_GetLoginKeyHandler的发送与处理二、普通Actor相关代码解析1.ActorMessageSenderComponent类2.In原创 2021-09-12 10:14:42 · 1645 阅读 · 9 评论 -
ET服务器框架学习笔记-6.0杂记(异步协程锁)
ET服务器框架学习笔记-6.0杂记(异步协程锁)为了解决,使用异步编程时,某些情况下,需要异步按照我们编写的顺序执行。例如:查询同一个玩家的数据,场景:玩家登录->查询玩家身上金币->给玩家增加挂机金币,这时候由于是查询数据库操作,使用了异步,等待查询完毕,再执行计算金币。这个时候程序执行其他操作,比如登录扣除玩家金币,也是要查询玩家金币,又是查询数据库操作,又是异步。这个时候,没有协程锁会带来两个问题:1.都去数据库查玩家数据,带来性能浪费,只需要一个查询好已经通知到内存缓存了,另外一个可原创 2021-08-22 11:47:57 · 1378 阅读 · 0 评论 -
.net core底层入门学习笔记(十三-JIT后台阶段与机器码生成)
.net core底层入门学习笔记(十三)本篇主要记录,基于前面流程分析,变量版本标记等过程后的一些优化操作文章目录.net core底层入门学习笔记(十三)一、赋值传播二、公共子表达式消除三、断言传播四、边界消除检查二、使用步骤1.引入库2.读入数据总结一、赋值传播赋值传播阶段,会替换变量到其他拥有相同值(VN)的变量以减少赋值次数删除多余的本地变量。RyuJIT实现赋值传播的流程:1.为每个本地变量分配一个栈结构,根据支配顺序枚举基础块,遇到变量赋值往栈结构推入新版本;遇到本地变量使用,原创 2021-08-17 09:00:49 · 510 阅读 · 0 评论 -
ET服务器框架学习笔记-杂记(枚举与位运算)
ET服务器框架学习笔记-杂记(枚举与位运算)参考地址原创 2021-08-12 09:13:21 · 168 阅读 · 0 评论 -
.net core底层入门学习笔记(十二-JIT详细流程IL变形)
.net core底层入门学习笔记(十二)本篇主要记录IR变形与流程分析过程<font color=#999AAA文章目录.net core底层入门学习笔记(十二)一、IR变形1.添加内部代码2.提升构造体3.标记暴露地址的本地变量4.对基础块中各个节点进行变形操作二、使用步骤1.引入库2.读入数据总结一、IR变形IR变形阶段包含了大量针对HIR结构的处理,这个阶段的目标是对HIR结构进行正规化处理,让HIR结构更加面向目标平台,为接下来的优化阶段做准备。书里只介绍了一些重要的部分,整原创 2021-08-10 08:40:28 · 351 阅读 · 0 评论 -
.net core底层入门学习笔记(十一-JIT编译器)
.net core底层入门学习笔记(十一)本篇开始记录JIT编译器实现文章目录.net core底层入门学习笔记(十一)前言一、JIT编译器介绍二、使用步骤1.引入库2.读入数据总结前言传统编译器会在程序执行前预先生成机器码,然后保存于程序文件中,执行时从文件加载机器码到内存然后指示CPU执行。JIT编译器支持在程序执行过程中生成机器码,程序文件只保存程序代码或中间代码。.NET程序使用JIT编译器,文件中只包含C#,VB,F#等编程语言转换的中间代码即IL代码。.NET使用RyuJIT编译器原创 2021-08-06 08:50:21 · 654 阅读 · 0 评论 -
.net core底层入门学习笔记(十-GC详细流程)
.net core底层入门学习笔记(十)本节开始记录具体GC的详细流程文章目录.net core底层入门学习笔记(十)一、标记阶段1.获取根对象2.递归扫描根对象并设置存活标记3.卡片表扫描跨代引用设置存活标记4.强引用GC句柄设置存活标记5.固定GC句柄设置存活标记6.弱引用GC句柄,清空不再存活对象7.扫描析构对象列表,添加不再存活对象到析构队列8.枚举跟踪复活弱引用GC句柄,清空不再存活对象9.是否启用升代二、使用步骤1.引入库2.读入数据总结一、标记阶段1.获取根对象根对象是程序正原创 2021-07-31 08:54:04 · 820 阅读 · 5 评论 -
.net core底层入门学习笔记(九-GC简介与流程)
.net core底层入门学习笔记(九)本篇主要记录.net中GC的实现文章目录.net core底层入门学习笔记(九)前言一、栈空间与堆空间值类型与引用类型二、使用步骤1.引入库2.读入数据总结前言程序运行中会需要各种各样的数据,这些数据会占用内存空间,而计算机内存空间有限,所以应该在确定短时间不再使用他们时,需要及时释放这些内存空间。C语言要求开发者手动释放内存,.net使用垃圾回收机制自动释放内存。一、栈空间与堆空间根据前面所记录的,每个线程都有自己的栈空间,用于保存调用函数的数据原创 2021-07-26 09:09:29 · 983 阅读 · 0 评论 -
.net core底层入门学习笔记(八-异步与任务并行库Task)
.net core底层入门学习笔记(八)本篇主要记录.net中的异步操作文章目录.net core底层入门学习笔记(八)前言一、阻塞操作与事件循环二、.net中的异步编程模型三、任务并行库任务并行库的实现原理二、使用步骤1.引入库2.读入数据总结前言异步操作表示,执行某项操作以后不等操作结束,但可以额外在操作结束后收到通知。一、阻塞操作与事件循环前面提到线程是CPU可以执行的一段任务。线程可以进入休眠,等待被操作系统唤醒继续执行,切换线程有一定的性能成本。很多时候程序需要调用一些阻原创 2021-07-20 08:48:34 · 1736 阅读 · 1 评论 -
.net core底层入门学习笔记(七-多线程)
.net core底层入门学习笔记(七)本篇开始记录.net中多线程的实现原理文章目录.net core底层入门学习笔记(七)前言一、原生线程一、上下文切换二、线程调度三、栈空间二、托管线程一、托管线程对象二、前台线程与后台线程二、使用步骤1.引入库2.读入数据总结前言多线程机制,解决如何在有限的CPU核心上执行多个任务的一种机制。由操作系统管理的现成为原生线程,.net基于原生线程搭建了一套线程模型,托管代码在这套线程模型上运行,称为托管线程。一、原生线程主流操作系统通过多线程机制原创 2021-07-15 08:58:39 · 1285 阅读 · 0 评论 -
.net core底层入门学习笔记(六-异常)
.net core底层入门学习笔记(六)本篇开始主要记录.net core的异常处理机制文章目录.net core底层入门学习笔记(六)前言一、.net中的异常.net中异常结构保存方式二、使用步骤1.引入库2.读入数据总结前言处理意外情况的传统方式,通过函数返回值报告给调用函数,是否发生错误,并通过线程本地变量存储最后一次发生错误的原因。这样做会导致很多问题,例如:每次调用函数都要检查返回值,容易忽略详细的错误信息需要自定义结构体,且很难阅读如果当前调用函数无法处理异常,则要向上传原创 2021-07-09 09:11:10 · 322 阅读 · 4 评论 -
.net core底层入门学习笔记(五-汇编系统调用)
.net core底层入门学习笔记(五)本篇主要记录汇编关于系统调用与内存屏障相关问题文章目录.net core底层入门学习笔记(五)一、系统调用在X86上发起系统调用(软中断):在X86上发起系统调用(sysenter):在X86-64上发起系统调用(syscall):二、内存屏障1.乱序执行2.内存屏障3.双检索总结一、系统调用用户编写的程序一般不直接与硬件交互,与硬件交互的功能通常由操作系统实现,由操作系统将这些功能抽象化,并提供简单的接口供用户程序使用。主流的CPU架构,为提供安全性原创 2021-07-04 10:57:42 · 323 阅读 · 0 评论 -
.net core底层入门学习笔记(四-汇编函数调用)
.net core底层入门学习笔记(四)本篇主要记录,汇编-函数调用相关知识,重点需要结合之前的IL代码中的CALL命令文章目录.net core底层入门学习笔记(四)前言一、栈结构二、函数调用1.X86函数调用规范(1).进入任何函数时的指令流程如下:(2).调用任何函数时的指令流程如下:2.调用链跟踪3.省略帧寄存器4.其他调用规范总结前言函数的调用,主要注意的是调用规范,即函数与函数(也就是指令之间跳转)如何交换数据,以及如何回到被调用的函数。一、栈结构栈结构支持元素,先进后出,原创 2021-07-03 17:01:09 · 317 阅读 · 0 评论 -
.net core底层入门学习笔记(三-汇编)
.net core底层入门学习笔记(三)<font color=#999AAA 第三篇主要讲X86汇编相关文章目录.net core底层入门学习笔记(三)前言一、汇编的理解1.机器码的格式2.内存二、使用步骤1.引入库2.读入数据总结前言机器码是计算机可以直接执行的代码,.net通过IL语言在不同平台上,生成不同的机器码实现跨平台开发。机器码的表现形式,与书写使用的是汇编语言,学习汇编有助于理解.net程序的一些执行原理与内部机制。.net也是站在汇编,操作系统,cpu架构等基础上的。原创 2021-07-02 09:05:10 · 541 阅读 · 0 评论 -
.net core底层入门学习笔记(二-IL指令详细)
.net core底层入门学习笔记(二)本篇学习IL代码的流程控制文章目录.net core底层入门学习笔记(二)前言一、流程控制类型二、跳转指令详解1.无条件跳转2.有条件跳转指令总结前言流程控制是程序的基本能力之一,本篇记录IL中是如何实现流程控制,以及C#中的流程控制是如何转换到IL指令中的。一、流程控制类型流程控制指令包括:跳转指令,switch指令,退出、结束、返回指令其中跳转指令又可以细分为:无条件跳转,有条件跳转,比较跳转通过上面的基础跳转指令以及指令之间的组合,就可原创 2021-06-29 08:55:30 · 890 阅读 · 0 评论 -
.net core底层入门学习笔记(一-介绍与IL)
草稿:1.await 关键字会自动记录当前的同步上下文,回调时会自动在之前的线程上下文中进行回调。原创 2021-06-27 09:41:22 · 2269 阅读 · 3 评论