我的编程空间,编程开发者的网络收藏夹
学习永远不晚

详细介绍Coroutine

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

详细介绍Coroutine

  首先,讨论了并行执行的“执行主体”,它是一个抽象的概念,在操作系统层次上,有多种概念与之对应,如操作系统负责的进程、进程中的线程和进程中的协程,也称为轻量线程。许多语言在语法水平上不直接支持合作程序,而通过库支持的合作程序也没有完成,只提供合作程序的创建、销毁、切换等功能。若在这种协程中,如网络通信、本地文件读写等同步IO操作将阻塞其他并发执行协程,因此不能真正实现协程本身所期望的目标。

  为何要合作?

  有很多游戏程序(Process)需要花费大量的逻辑帧来进行计算。您将遇到“密集”的过程,比如寻路,寻路计算量很大,所以我们通常将它分割成不同的逻辑帧来进行计算,以免影响游戏的帧速率。

  您将遇到“稀疏”的流程,比如游戏中的触鱼,大多数情况下它不做任何事情,但一旦被叫来将做非常重要的事情(比图说游戏中自动打开的门是在大门前放置一个EmptyObja,它作为trigger,用户进入大门时将触发事件)。

  无论何时,如果您希望创建一个能够通过多个逻辑帧而不使用多线程的流程,那么您需要将一个任务分成多个任务,然后在下一帧继续该任务。

  例如,算法是具有主循环的算法,因为有记录未处理的节点,所以为了不影响帧率,可以使算法在各逻辑帧中只处理一部分节点,以免帧率受到影响。

  例如,我们在处理网络传输问题时,常常需要处理异步传输,需要等文件下载完成后才能执行其他任务,通常我们用回调来解决这个问题,但可以更自然地使用协程来解决这个问题,例如下面这段代码:  

  什么是协程?

  就程序结构而言,协程是一个有限状态机,对此,人们可能不会很理解,说到协程,我们还会提到另外一件事,即子例程(Subroutine),这个子例程通常可以指一个函数,这个函数没有状态,等到函数返回后,所有的本地变量都会消失,但是在协程中,我们可以多次返回一个函数,这个局部变量作为状态保存在协程中,知道最后一次返回的,协程的状态就会被清除。

  简单地说,协程就是:您可以编写连续的代码,然后指出哪些地方需要暂停,然后系统将在下一个帧或下一个时间段后继续执行该代码。  

  在协程中,因为协程是并发的,它的本质是单线程在调度协程,因此使用同步的IO操作将阻塞整个线程,使协程无法实现高并发。而且,如果要使用非阻塞IO操作,则必须使用某些库,来替代大家之前熟悉的、同步操作的库,提高理解和学习的成本。

    >>>>>>点击进入游戏开发专题

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

详细介绍Coroutine

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

详细介绍Coroutine

首先,讨论了并行执行的“执行主体”,它是一个抽象的概念,在操作系统层次上,有多种概念与之对应,如操作系统负责的进程、进程中的线程和进程中的协程,也称为轻量线程。许多语言在语法水平上不直接支持合作程序,而通过库支持的合作程序也没有完成,只提供合作程序的创建、销毁、切换等功能。若在这种协程中,如网络通信、本地文件读写等同步IO操作将阻塞其他并发执行协程,因此不能真正实现协程本身所期望的目标。
详细介绍Coroutine
2024-04-23

DockerCompose详细介绍

DockerCompose是一个用于定义和运行多个Docker容器的工具。它可以让用户轻松地定义和管理多个容器的配置,并且可以通过简单的命令来启动、停止和重启这些容器。在本文中,我们将详细介绍DockerCompose的使用和功能
2023-05-16

详细介绍Linux IO

1.IO概述 分析一下写操作: char *buf = malloc(MAX_BUF_SIZE); strncpy(buf, src, , MAX_BUF_SIZE); fwrite(buf, MAX_BUF_SIZE, 1, fp); f
2022-06-03

android AsyncTask详细介绍

AsyncTask和Handler对比 1 ) AsyncTask实现的原理,和适用的优缺点 AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可
2022-06-06

Android Bitmap详细介绍

代码如下: package com.testbitmapscale; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream;
2022-06-06

javascript this详细介绍

this的值是在运行时确定的  JS中的this究竟代表什么,这是在程序运行时根据上下文环境确定,可以分为以下几种情况。  1. 全局作用域中的this  在全局作用域中,this指向window对象。  ?  1  2  3  4  5 
2023-06-03

linux cgroups详细介绍

Cgroups是什么?cgroups(Control Groups) 是 linux 内核提供的一种机制,这种机制可以根据需求把一系列系统任务及其子任务整合(或分隔)到按资源划分等级的不同组内,从而为系统资源管理提供一个统一的框架。简单说,
2022-06-04

Pythonself参数详细介绍

事实上,Python只是规定,无论是构造方法还是实例方法,最少要包含一个参数,并没有规定该参数的具体名称。之所以将其命名为self,只是程序员之间约定俗成的一种习惯,遵守这个约定,可以使我们编写的代码具有更好的可读性
2023-01-29

Nginx服务详细介绍

Nginx是lgor Sysoev为俄罗斯访问量第二的rambler.ru站点设计开发的。从2004年发布至今,凭借开源的力量,已经接近成熟与完善。Nginx功能丰富,可作为HTTP服务器,也可作为反向代理服务器,邮件服务器。支持FastC
2023-06-05

AndroidCrash与ANR详细介绍

对于Android开发的人来说,想必对Crash和ANR这俩都不陌生,并且都对其恨之入骨,因为它俩的产生会大大影响用户体验。所以,在此,结合本人的开发经验,对其做个总结
2022-11-13

编程热搜

  • 教你如何为你的Cocos2D-X资源加密解密
    编程学习网:我们平时在用Cocos2D-X时都不想让别人看到自己的文件,本篇教程将教你如何为你的Cocos2D-X资源加密解密。
    教你如何为你的Cocos2D-X资源加密解密
  • 教你如何用Cocos2D实现3d效果
    编程学习网:经过了之前几篇教程,相信各位同学已经对Cocos2D不陌生了,本篇教程将教你如何用Cocos2D实现3d效果。
    教你如何用Cocos2D实现3d效果
  • 零基础学习之教你如何用Cocos2D实现画中画效果
    编程学习网:没学过Cocos2D?没关系,多看看我们的教程,一步步成为游戏开发大神。本篇教程将教你如何用Cocos2D实现画中画效果。
    零基础学习之教你如何用Cocos2D实现画中画效果
  • 解析安卓Cocos2D-X2转移项目到Cocos2D-X3过程
    编程学习网:相信有一部分同学都经历过将项目从Cocos2D-X2转到Cocos2D-X3的麻烦,本篇教程将解析将项目从Cocos2D-X2转到Cocos2D-X3的过程。
    解析安卓Cocos2D-X2转移项目到Cocos2D-X3过程
  • 游戏脚本设计基础教程
    编程学习网:类游戏编程,特别是RPG脚本起着驱动整个游戏进程的作用。事件的运作建立在脚本的基础上,而脚本的设计建立在引擎的基础上,所以设计脚本之前因该想一想引擎,好的脚本对剧情的描述具有简单、准确的性质。
    游戏脚本设计基础教程
  • 成为游戏设计师必须具备的条件
    编程学习网:很多人喜欢玩游戏,他们总在不停感叹:这款游戏实在太精彩了,我要是能设计出这样的游戏就!而在他们行动之前,还有许多需要解答的问题罗列在前,我要如何成为游戏设计师?我需要具备哪些技能和素质?游戏设计师究竟在做什么工作?那么,游戏设计师有哪些任务呢?我们将讨论这个问题。
    成为游戏设计师必须具备的条件
  • 贪食蛇小游戏开发设计基础教程
    编程学习网: 贪吃蛇是家喻户晓的益智类小游戏,大家小时候应该都有玩过,编程学习网这里就不多介绍了,本教程将教你用MicrosoftVisualC++来制作它。
    贪食蛇小游戏开发设计基础教程
  • 成为优秀的Cocos2D程序员需要的十个品质
    编程学习网:相信各位同学都在为了成为优秀的Cocos2D程序员而奋斗着,那么一个优秀的Cocos2D程序员需要具备什么品质呢?本篇教程为你揭秘成为一个优秀的Cocos2D程序员所需要的十个品质。
    成为优秀的Cocos2D程序员需要的十个品质
  • Unity3d脚本基础
    最好用游戏引擎开发游戏,推荐Unity3D引擎,该引擎学习更简单,更易上手。游戏引擎可以编辑你的游戏场景、角色和游戏需要的东西。还有,学习编写脚本。编写脚本实际上就是编程。例如,你要在游戏中按键盘方向键来控制角色行走,这必须通过编写脚本。因此,脚本是游戏的逻辑。小编推荐你去学C编程,Unity3D通常是用C语言编写的。
    Unity3d脚本基础
  • 实例教程解析制作flash小游戏
    编程学习网:flash小游戏在游戏开发中是属于比较简单的类型,本例为FlashAS3.0实例教程,介绍射击类游戏的制作,主要分游戏界面的制作和类的编写两部分,从简单的开始做起,跟着教程动手做做看吧。
    实例教程解析制作flash小游戏

目录