最近有幸参与并入选了GSoC 2025,这篇文章是我给Chromium项目组的提案,针对Web Performance API,旨在优化浏览器内核对于INP性能指标的一些处理。
小红书📕👉【CQU大二 成功被选为Google GSoC贡献者 - g122622 | 小红书 - 你的生活指南】 😆 1zhytSvgu5XAp9W 😆 https://www.xiaohongshu.com/discovery/item/681e22300000000023011448?source=webshare&xhsshare=pc_web&xsec_token=ABqekbzfvoxIozXy36qJLYrAPjDUL5wByx4W95rEowRts=&xsec_source=pc_share
Overview & BackgroundsBrief introduction about meI’m a sophomore studying Computer Science at Chongqing University, China. I have bee ...
游戏开发者只要好好写代码就可以,可是玩家要考虑的事情就很多了。
自诞生以来,Minecraft以其创新的玩法吸引了全球无数玩家,更是常年霸榜成为全球销量第一的游戏(Wikipedia)。然而,这款游戏始终面临着一个巨大的技术瓶颈:单线程。在多核处理器大行其道的当下,多核心带来的优势无法得到充分利用,“一核有难,多核围观”的调侃在各大论坛中不绝于耳。随着时间的推移,在多方共同努力下,Minecraft终于逐渐引入了一些多线程优化措施,尽管进展较慢、力度不大,却也实打实带来了一定的性能提升。
在这篇文章中,笔者将回顾Minecraft的多线程优化历程,从最初的单线程架构出发,探索游戏是如何逐步克服技术挑战,引入多线程机制的(尽管这种多线程机制并没有显著提升游戏体验)。笔者还会试着剖析Minecraft为何难以实现全面的多线程化,以及第三方服务端的开发者们是如何引入力度更大的多线程机制来改善游戏体验的。
建议前往我的博客阅读本文,以获得更好的markdown阅读体验,以及更加清晰的图表。
声明:
本文为作者原创,笔者通过大量阅读不同版本的Minecraft游戏代码才撰写出本文,创作不易, ...
1 前言VSCode 能够在各大平台(Windows/Mac/Linux/Web/…)上遍地开花,离不开其强大的跨平台能力。而这个能力不仅依赖于 electron 与 chromium 自身的平台兼容性,还依赖于其复杂的构建系统。
本文旨在深入探索 VSCode 的构建系统,探究其构建过程、依赖管理、工具和配置等。在文末,还会介绍 vscode 实现跨平台构建的具体方案。
2 VSCode 构建系统概述VSCode 的构建系统并没有使用前端常用的 Webpack、Rollup 等方案,也没有采用开箱即用的脚手架,而是依赖于自己从头搭建的一套工具链,基于 npm + gulp。npm 用于管理项目依赖, gulp 用于自动化构建任务。(几年前 VSCode 使用yarn管理依赖,现在已经迁移到npm)
下面我们从文件目录结构的角度来总览 VSCode 的构建系统:
2.1 文件目录结构与构建相关的源码文件位于 ./build ,与 ./src 目录平级。
12345678910111213141516171819202122232425262728 ...
1. 前言VSCode 是一个开源的跨平台代码编辑器,支持多种编程语言,拥有强大的插件系统和活跃的社区。本文将介绍 VSCode 源代码中常用的设计模式,并通过实例来展示 VSCode 团队如何将这些设计模式付诸实践。
作为一名从初中就入坑的编程爱好者,每当我在使用 VSCode 时都会感到一种特别的情感联系——因为我不仅仅是在得心应手地使用一款优秀的工具,更是在体验一段由许多人共同努力所编织出来的故事。VSCode 从一个使用 js 编写的轻量级 editor 走到今天,使得笔者能够用 VSCode 来丝滑阅读 VSCode 自身的源码,这也算是一种很奇妙的体验吧。
1.1 写这篇文章的原因作为一款基于 Electron 的大型代码编辑器,VSCode 的复杂度在一众 Electron 应用中可以说是首屈一指,因此我一直对 VSCode 有着强烈的探索欲望。在学习《设计模式》的过程中,我发现 VSCode 是一个很好的典范,这 prompted me to write this article. 我希望通过分享 VSCode 中常用的设计模式,帮助读者更好地理解设计模式的概念,并切身 ...
1. 题目背景我们以一道LeetCode1036.逃离大迷宫来引入。
这道题目给定一个 1000000 x 1000000 (1e6 x 1e6)的网格,每个网格上方格的坐标为 (x, y) 。
现在从源方格 source = [sx, sy] 开始出发,意图赶往目标方格 target = [tx, ty] 。数组 blocked 是封锁的方格列表,其中每个 blocked[i] = [xi, yi] 表示坐标为 (xi, yi) 的方格是禁止通行的。每次移动,都可以走到网格中在四个方向上相邻的方格,只要该方格 不 在给出的封锁列表 blocked 上。同时,不允许走出网格。
只有在可以通过一系列的移动从源方格 source 到达目标方格 target 时才返回 true。否则,返回 false。
示例 1:
123456输入:blocked = [[0,1],[1,0]], source = [0,0], target = [1,3]输出:false解释:从源方格无法到达目标方格,因为我们无法在网格中移动。无法向北或者向东移动是因为方格禁止通行。无法向南或者向西移动是因为不能走出 ...
本项目是2024立创ESP32物联网征集令设计大赛参赛作品。
1. 视频链接:B站视频–功能演示
2. 项目简要介绍本项目是2024立创ESP32物联网征集令设计大赛参赛作品:一款基于ESP32的写字机器人,它能在各种纸质介质上进行文字、图表和手绘创作。通过集成友好的Web前端界面,用户可以在多种设备上(如PC、手机和平板电脑)进行实时预览和指令控制。
项目实际图:
控制界面:
2.1 创新点:超低成本与传统的写字机器人相比,本项目采用了全网独有的创新方案,网上没有任何的现成资料可供参考。其创新性主要体现在以下方面:
成本优化:摒弃传统的伺服和步进系统,大胆的采用更经济的直流电机,大幅降低了整体成本。使用PID算法+高精度、无接触式的MT6701磁编码器来弥补传统直流电机的精度缺陷。
机械设计:采用廉价的抽屉导轨(一根只要2块钱,而专业导轨动辄上百)代替昂贵的专业导轨,进一步削减成本,同时也尽可能保证机器人的稳定性和可靠性。
2.2 项目功能该设计集成了两个普通的直流电机以及一个用于抬笔和落笔的专用电机。利用低功耗蓝牙(BLE)通信技术,实现了高效的文字、图表和手绘创作。此 ...
Folia简介
Folia是PaperMC组织下的一个项目,旨在为Minecraft服务器提供真正的多线程和区域化的区块更新机制。这个项目由著名的Minecraft优化专家Spottedleaf发起,开发始于2020年8月。Folia通过一系列的前置补丁,如Starlight、玩家区块地图(player chunkmap)以及区块重写(chunk rewrite),解决了长期以来限制服务器扩展的一些问题。
在Folia中,邻近的已加载区块被组合成independent region(独立区域),每个region都有自己的更新循环,以常规的Minecraft更新速率(20 TPS)运行。不同region的更新循环在一个可配置的线程池中并行执行。
Folia已经成功在一些大型服务器上进行了测试,(如2b2t和DonutSMP)。2b2t升级到1.19版本后,由于采用了Folia而运行得非常流畅;DonutSMP则部署了多个Folia实例来支持其庞大的SMP网络,每天能承载数千名玩家在线,处理超过46万个实体。
想要更深入地了解Folia,可以阅读它的官方仓库。
这是一篇详细介绍Folia的 ...
1 并发、异步与事件循环1.1 嵌套的异步函数调用栈显示问题1234567891011/** * 判断数据是否存在 * @param key */public async hasData(key: string): Promise<boolean> { return await super.query(key)}public async hasData(key: string): Promise<boolean> { return super.query(key)}
这里的super.query(key)也是一个异步函数,返回值为Promise<boolean>。
在这两个函数中,第一个函数使用了await关键字来等待super.query(key)函数的返回值,而第二个函数则直接调用了super.query(key)。上述两个函数的执行逻辑表现一致,且返回值一致。但是在抛出异常时会有一些区别,主要是在调用栈的显示上。
如果super.query(key)函数抛出异常:
对于第一种写法,异常会被 ...
1 总述最近我对个人网站进行了一次比较大的改变,将其从gitee迁移到了腾讯云,并且注册了独立的域名,这意味着我不再依赖于gitee,有了更大的自主权,基本上摆脱了以往寄人篱下的状态了。新网站使用腾讯云COS搭配CodingCI搭建,腾讯云COS是一种对象存储服务,可以帮助我管理网站的静态资源,而CodingCI是一个持续集成工具,我用来自动化构建、测试和部署网站。这次迁移并不仅仅是技术上的一次迁移,更是一次有益的尝试,也让我变得更加迷茫。这算是比较新的一种建站思路,遂记录之。
下面是我搭建网站的流程:
腾讯云-域名购买和备案
Gitee-创建项目仓库,存放需要构建的代码
腾讯云-使用对象存储服务,初始化存储桶
Coding-选择合适的Docker容器,配置CI工作流
DNSPod-配置域名解析
腾讯云-SSL证书签发
接入Algolia搜索服务
接入百度统计
搜索引擎收录(尚未完成)
这篇文章主要记录Coding平台和腾讯云对象存储的使用,其他步骤省略不提。
2 腾讯云COS搭建与配置2.1 搭建存储桶创建一个存储桶,将权限设置为公有读私有写;地域设置为中国香港(或者其他非中国大 ...
最近因为一些原因,我开始接触到蓝牙技术的实现细节。本文是我在学习过程中,结合自己的思考所做的笔记。
本文介绍的是低功耗蓝牙(LE),和传统蓝牙在协议栈等方面存在些许不同。现在出货的智能手机、笔记本电脑等设备同时支持低功耗蓝牙和经典蓝牙,而大多数市面上能买到的蓝牙耳机只采用低功耗蓝牙(LE)方案。
蓝牙协议栈的跨度极大,涉及通信、计网、信息安全等多个领域,而且每层都很复杂,凭本人极其有限的技术水平和有限的篇幅只能讲个大概,而且不可避免会有疏漏之处,建议你参考蓝牙官方文档、专业的技术书籍、技术论坛等,他们都比我写的更详细、更准确。祝你学习顺利!
蓝牙规范文档
1 蓝牙技术简述蓝牙,是一种短距离低功耗无线数据交换技术,工作在2.4GHz ISM频段上。请再次注意,本文介绍的是低功耗蓝牙(BLE),和传统蓝牙在协议栈等方面存在些许不同。BLE在核心规范上是向后兼容的。
2 蓝牙协议栈概述从协议栈的结构来看,BLE可从上到下分为Host和Controller,这种分层方式提升了蓝牙的可适配性。我从网上找到一张比较清晰的图片,展示蓝牙协议栈的结构:
比较著名的Host协议栈有Bluedroid( ...