当前位置:首页 > 技术分析 > 正文内容

看似不起眼的一个习惯,竟能直接让你的游戏卡死

ruisui883周前 (04-07)技术分析20

13. 阻塞与非阻塞

13. 阻塞与非阻塞

首先,我们这边所说的阻塞非阻塞指的是加载文件。在很多的api中,我们可以看到一个接口经常有2种形态:

readFile

readFileSync

或者unity里面加载资源的接口:

Resource.Load

Resource.LoadSync

我们用js写文件的时候,很容易建立一个认知。当我们想对文件进行有序的操作的时候,我们用阻塞的方式。如果我们不需要任何的时序或者只使用到很少的时序,那么我们就可以用非阻塞的形式。

在游戏里面,经常会被建议不要用阻塞的方式。因为阻塞行为一旦发生,它是可能卡住整个界面的,使得游戏无法做出任何的响应。那我们是不是就不用阻塞了?我们先来看一看阻塞的优点。阻塞相对非阻塞而言,它的速度是比较快的。它可以在一些场景中进行应用:

在游戏的启动加载过程中,为了缩短玩家的等待时间。我们大量使用阻塞,只在单个文件加载后更新一下界面,接着就继续阻塞加载了。

在大部分游戏引擎里面,加载界面资源我们常用的是非阻塞。但是当我们加载界面资源后,如果实例化这个对象一定是耗时的或者说卡的。那么这个时候我们一般会先把界面的外框加载出来,再加载里面的内容,这个时候我们就可以换用阻塞了。当存在某些逻辑是不得不卡住的或者说耗时严重的,而且也无法通过线程或者其他方式优化的时候,我们先阻塞加载静态的背景,再进行一系列耗时的操作,包含阻塞加载资源,对象的实例化等。

这2个案例告诉了我们它的应用场景,在效率至上的地方,以及在耗时已经超出的地方。因为如果一定要卡(耗时),那么就在一瞬间铺个静态背景卡个够。这边还可以举个例子就是场景切换后,需要加载大量的玩家对象。这些对象在加载的时候因为数量,也因为其他不确定的因素,可能是会导致CPU的高峰。那么我们就在切换场景的加载页面出现之前,先同步把它们都加载完。这样,进入场景后就不会再遇到它们导致的卡顿。

对于非阻塞,通常伴随着事件完成的回调处理。比如说加载一个文件,我们会在加载完成后回调到我们注册的函数。对于代码而言,阻塞的代码写起来是比较舒服的,不用各种回调嵌套,因为回调一旦多了,会引发“回调地域”的灾难,这在js里面有专门的介绍。我们可以通过协程来解决,模拟一个同步的写法。

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/3337.html

标签: readfilesync
分享给朋友:

“看似不起眼的一个习惯,竟能直接让你的游戏卡死” 的相关文章

高校水电远程抄表收费管理系统都有哪些技术优势?

学校后勤是一个庞大的管理体系,学生宿舍用电管理是其中重要的一个环节,宿舍内漏电、超负荷用电、拖欠电费和浪费电现象一直是困扰学校后勤管理的普遍问题。而其中,学生宿舍安全用电更是学校后期管理的重中之重。为加强对学生宿舍用电管理,保障学生的财产及生命安全,现建设一套用电的控制系统。亿玛推出的高校水电远程抄...

首个支持苹果 M1 Mac 的 Linux 发行版发布,面向用户开放下载

IT之家 3 月 20 日消息,Asahi Linux 是研究 Linux for Apple Silicon macs 的组织群体,3 月 18 日,Asahi Linux 宣布成功在 M1 MacBook Air 笔记本电脑上运行,并开放了 Asahi Linux 的下载安装。Asahi Lin...

专为系统管理员设计的LINUX发行版SYSLINUXOS

SysLinuxOS 承诺“结束为管理任务寻找正确工具”的局面,提供“非常广泛的软件选择,特别是用于使用互联网”。译自 SysLinuxOS, A Linux Distro for System Administrators,作者 David Cassel。全球各地的系统集成商正在发现 SysLin...

快速上手React

web前端三大主流框架1、Angular大家眼里比较牛的框架,甚至有人说三大框架中只有它能称得上一个完整的框架,因为它包含的东西比较完善,包含模板,数据双向绑定,路由,模块化,服务,过滤器,依赖注入等所有功能。对于刚开始学习使用框架的小伙伴们,可以推荐这个框架,学会之后简直能颠覆之前你对前端开发的认...

使用cgroup限制进程资源

这里使用containerd项目中的cgroup包来实现进程资源限制。先写一个耗费一个CPU并且一秒增加10m内存的测试进程package mainimport ( "fmt" "math/rand" "time")func main() { go f...

学前端,这30个CSS选择器,你必须熟记

你学会了基本的id,class类选择器和descendant后代选择器,然后就觉得完事了吗?如果这样,你就会错过许多灵活运用CSS的机会。虽然本文提到的许多选择器都属于CSS3,并且只能在现代的浏览器中使用,但学会这些是大有好处的。什么是CSS选择器呢?每一条css样式定义由两部分组成,形式如下:[...