Posts

Showing posts from September, 2023

干翻 nio ,王炸 io_uring 来了 ,史上最详细说明及最全图解!!

Image
大趋势:全链路异步化,性能提升10倍+ 随着业务的发展,微服务应用的流量越来越大,使用到的资源也越来越多。 在微服务架构下,大量的应用都是 SpringCloud 分布式架构,这种架构总体上是 全链路同步模式 。 全链路同步模式 不仅造成了资源的极大浪费,并且在流量发生激增波动的时候,受制于系统资源而无法快速的扩容。 全球后疫情时代,降本增效是大背景。如何降本增效?一条好的路径: 全链路同步模式  ,升级为  全链路异步模式 。 全链路异步模式 改造 具体的内容,请参考尼恩的深度文章: 全链路异步,让你的 SpringCloud 性能优化10倍+ 先回顾一下全链路同步模式架构图 全链路同步模式  ,如何升级为  全链路异步模式 , 就是一个一个 环节的异步化。 40岁老架构师尼恩,持续深化自己的3高架构知识宇宙,当然首先要去完成一次牛逼的 全链路异步模式 微服务实操,下面是尼恩的实操过程、效果、压测数据(性能足足提升10倍多)。 全链路异步模式 改造 具体的内容,请参考尼恩的深度文章: 全链路异步,让你的 SpringCloud 性能优化10倍+ 并且,上面的文章,作为尼恩 全链路异步的架构知识,收录在《 尼恩Java面试宝典 》V52版的架构专题中 注:本文以 PDF 持续更新,最新尼恩 架构笔记、面试题 的PDF文件,请从这里获取: 语雀 或者 码云 全链路异步化的最终目标 全链路异步化的最终目标,如下图所示: 应用层:编程模型的异步化 框架层:IO线程的异步化 OS层:IO模型的异步化 一:应用层:编程模型的异步化 这个请大家去看 尼恩的 《 响应式 圣经 PDF 》电子书 随着 云原生时代的到来, 底层的 组件编程 越来越 响应式、流化, 从命令式 编程转换到 响应式 编程,在非常多的场景 ,是大势所趋。 而响应式编程, 学习曲线很大, 大家需要多看,多实操。 二:框架层:IO线程的异步化 这个大家 都选择 具有异步 回调功能的 异步线程模型,如 Reactor 线程模型 这个是面试的绝对重点 IO的王者组件,Netty框架,整体就是一个 Reactor 线程模型 实现 也是非常核心的知识,这里不做展开,请大家去看尼恩的畅销书《Java 高并发核心编程卷 1 加强版》。 三:OS层:IO模型的异步化 目前的一个最大难题,...

CSGO/Counter-Strike 2游戏闪退,更新,无法启动,加载地图卡住等问题解决方案!

在做下面方法前请先尝试重启和检查游戏完整性,检查游戏完整性方法如下,首先第一步打开库,找到csgo/Counter-Strike 2右键点击属性点本地文件,验证游戏完整性,看是否有文件损坏。 1.打开游戏就闪退 这种情况检查一下内存问题,右键我的电脑,属性,高级系统设置,高级,性能-设置,高级,虚拟内存-更改,取消最上面的自动管理,点下面的自定义大小,设置内存大小8192mb然后重启就行了,如果还是不行可以尝试下面的解决方法。 2.加载游戏闪退 这种情况有两个问题,第一个可能是显卡驱动问题,把现有的显卡驱动卸载在相应品牌的官网下载最新的驱动安装重启后进入游戏就好了,第二个可能是网络问题,目前最流行的方法就是下载一个 LSP修复工具 ,点击LSP修复,重启再进入游戏就好了。 3.检查游戏环境 win+R快捷键运行框中输入dxdiag查看是否正常,不正常百度下载修复工具。 4.检查电脑C++等游戏环境是否安装完整 这种情况可以直接重新下载安装,在网络上下载安装包下载并安装就可以了。 5.网络配置问题 win+R快捷键打开CMD面板,依次输入以下命令重置配置。 输入netsh advfirewall reset回车 输入netsh int ip reset回车 输入netsh int ipv6 reset回车 输入netsh winsock reset回车 重启电脑 6.提示STEAM需要更新不是最新版本 出现Launcher Error错误,该类问题暂无完美解决方法,目前测试有效的可采取更换测试版本,在STEAM库找到CSGO,右键属性,测试,选择最新版本,启动游戏。其次是通过科学上网方法进行卸载STEAM重新安装 7.VAC验证错误 win+R快捷键打开运行,输入services.msc 在服务中找到Steam Client service右键属性,把启动类型设置为自动 设置后点击应用等待steam服务启动后即可 8.Launcher Error Unicode directory path not supported. Error 0x5E94 at. Please install game under directory p3th containing only Latin letters. CSGO安装路径要求是纯英文路径,无法包含中文,否则在安装结束后将面临无...

从Linux零拷贝深入了解Linux I/O 操作及其原理和优化!

Image
前言 存储器是计算机的核心部件之一,在完全理想的状态下,存储器应该要同时具备以下三种特性: 速度足够快:存储器的存取速度应当快于 CPU 执行一条指令,这样 CPU 的效率才不会受限于存储器; 容量足够大:容量能够存储计算机所需的全部数据; 价格足够便宜:价格低廉,所有类型的计算机都能配备。 但是现实往往是残酷的,我们目前的计算机技术无法同时满足上述的三个条件,于是现代计算机的存储器设计采用了一种分层次的结构: 从顶至底,现代计算机里的存储器类型分别有: 寄存器、高速缓存、主存和磁盘 ,这些存储器的速度逐级递减而容量逐级递增。 存取速度最快的是 寄存器 ,因为寄存器的制作材料和 CPU 是相同的,所以速度和 CPU 一样快,CPU 访问寄存器是没有时延的,然而因为价格昂贵,因此容量也极小,一般 32 位的 CPU 配备的寄存器容量是 32✖️32 Bit,64 位的 CPU 则是 64✖️64 Bit,不管是 32 位还是 64 位,寄存器容量都小于 1 KB,且寄存器也必须通过软件自行管理。 第二层是 高速缓存 ,也即我们平时了解的 CPU 高速缓存 L1、L2、L3 ,一般 L1 是每个 CPU 独享,L3 是全部 CPU 共享,而 L2 则根据不同的架构设计会被设计成独享或者共享两种模式之一,比如 Intel 的多核芯片采用的是共享 L2 模式而 AMD 的多核芯片则采用的是独享 L2 模式。 第三层则是 主存 ,也即主内存,通常称作随机访问存储器(Random Access Memory, RAM)。是与 CPU 直接交换数据的内部存储器。它可以随时读写(刷新时除外),而且速度很快,通常作为操作系统或其他正在运行中的程序的临时资料存储介质。 至于 磁盘 则是图中离用户最远的一层了,读写速度相差内存上百倍;另一方面自然针对磁盘操作的优化也非常多,如 零拷贝 、 direct I/O 、 异步 I/O 等等,这些优化的目的都是为了提高系统的吞吐量;另外操作系统内核中也有 磁盘高速缓存区 、 PageCache 、 TLB 等,可以有效的减少磁盘的访问次数。 现实情况中,大部分系统在由小变大的过程中,最先出现瓶颈的就是 I/O ,尤其是在现代网络应用从 CPU 密集型转向了 I/O 密集型的大背景下, I/O 越发成为大多数应用的性能瓶颈。 传统的 Linux...