2011-08-23 60 views
4

在我的游戏中,用户可以加载自定义脚本。 通常会加载50-100个脚本。 每个脚本都通过其Update方法调用每个框架。我应该在自己的线程中运行每个插件吗?

  1. 当脚本崩溃时,其他脚本不应受到影响。
  2. 脚本更新方法允许每帧最多运行1毫秒。所以我也需要能够中止脚本冻结/不及时反应。

我该怎么做?我认为每秒启动3000 - 6000个线程并不是这里的最佳做法。 我也无法启动线程,只要调用Update循环并等待16ms,因为脚本需要与游戏同步。脚本依赖于每帧运行。

线程池是否是正确的选择?如果是这样,我该如何放弃超时的脚本?

回答

4

简而言之:保护敌方恶意代码很难。

1.当脚本崩溃时,其他脚本不应受到影响:要实现此目的,Windows中唯一可靠的方法是在单独的进程中运行每个脚本。即由“脚本”引起的StackOverflow异常会导致您的流程失效。跨进程沟通不太可能轻松满足您的性能要求。

2.每个脚本1毫秒:中止线程是一种解决方案。避免大量的线程(超过数十个线程是值得怀疑的:线程之间的切换可能会导致性能下降,堆栈空间吃掉所有内存,并且在一般情况下,同步状态交叉线程很有趣)。考虑不要重新启动表现不佳的“脚本” - 这样您就不必担心太多的Thread.Abort调用。请注意,杀死不需要的线程会杀死与“脚本”相关的所有内容,因为它可能催生了自己的线程/异步操作/线程池任务...

相关问题