ios – SpriteKit,将流程放在另一个核心上?

ios – SpriteKit,将流程放在另一个核心上?,第1张

概述想象一下你的 class NattyScene: SKScene { 您可能有节点的自定义字段,或每帧发生的其他内容.现在想象你有一些计算,一个很好的例子可能是重心…… var globalCOG: CGPointfunc updateCOG() { .. say, get all the .position of all Spaceship .. globalCOG = .. so 想象一下你的

class NattyScene: SKScene {

您可能有节点的自定义字段,或每帧发生的其他内容.现在想象你有一些计算,一个很好的例子可能是重心……

var globalCOG: CGPointfunc updateCOG() {   .. say,get all the .position of all Spaceship ..   globalCOG = .. some point}

把它放在另一个线程上是很有意义的,假设像

>读取.positions的线程安全/快速
>另一个核心的另一个假定的线程,知道SpriteKit帧(这样你可以用通常的方式计算直到放弃时间等,也许你可能更喜欢跳帧或者其他什么 – 通常的线程游戏编程)
>你可以在线程安全/ blahblah将COG全局写回SpriteKit的其余部分

这是什么交易?

> Swift4 / SpriteKit中现代的成语究竟是什么?
>你如何强迫它进入另一个整体物理核心?

有任何想法吗?

overrIDe func update(_ currentTime: TimeInterval) {    let x = safely get info from a thread on another physical core on the device    print("Now that's cool")}

在另一个核心……

func loopy() {    let x = safely look at info on NattyScene    let globalCOG = calculation}

注意,KOD指向了dispatchQueue,这很棒 – 但有没有办法确保它真的在另一个核心?

解决方法 不幸的是,不幸的是我认为这不可能有两个主要原因.

原因1

您在iOS中没有这种低级别访问权限.

*** 作系统决定哪个线程在哪个核心上运行.
它还具有根据应用范围之外的多种条件打开和关闭核心的功能.

E.g. When in Grand Central dispatch you write

dispatchQueue.global(qos: .background).async { }

You have no guarantee the closure will be executed on a different core.

原因2

SpriteKit的游戏运行循环确实执行了一堆东西

>通话更新
>评估行动
>模拟物理
>适用约束

您的想法确实意味着在呼叫更新阶段执行以下步骤

>继续“背景”线程
>执行一些繁重的计算
>将结果返回主线程

但此时您无法保证游戏运行循环仍处于呼叫更新阶段.它可能在评估行动中,甚至可能在下一帧工作.
另一方面,渲染每个帧的时间不超过16毫秒.

可能解决方案

您可以充分利用当前核心允许的64位,而不是针对另一个cpu核心.
请看一下有关SceneKit的this Q/A,其中列出了SIMD的优点.

总结

以上是内存溢出为你收集整理的ios – SpriteKit,将流程放在另一个核心上?全部内容,希望文章能够帮你解决ios – SpriteKit,将流程放在另一个核心上?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1067862.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存