文章详情

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

请输入下面的图形验证码

提交验证

短信预约提醒成功

详细介绍Coroutine

lzzyok小精灵

lzzyok小精灵

2024-04-23 23:39

关注

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

  为何要合作?

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

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

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

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

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

  什么是协程?

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

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

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

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

阅读原文内容投诉

免责声明:

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

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

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-游戏开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯