在我的游戏中,用户可以加载自定义脚本。 通常会加载 50-100 个脚本。 每个脚本通过其 Update 方法在每一帧中被调用。
- 当一个脚本崩溃时,其他脚本不应受到影响。
- 允许脚本更新方法每帧最多运行 1 毫秒。因此,我还需要能够中止卡住/未及时使用react的脚本。
我应该怎么做?我认为每秒启动 3000 - 6000 个线程并不是这里的最佳实践。 一旦在循环中调用更新并等待 16 毫秒,我也无法启动线程,因为脚本需要与游戏同步。脚本依赖于每一帧运行。
这里线程池是正确的选择吗?如果是这样,我该如何在超时时中止脚本?
最佳答案
简而言之:很难抵御恶意代码。
1。当一个脚本崩溃时,其他脚本不应受到影响:要实现此目的,Windows 中唯一可靠的方法是在单独的进程中运行每个脚本。 IE。由“脚本”引起的 StackOverflow 异常将导致您的进程中断。跨进程通信不太可能轻易满足您的性能要求。
2。每个脚本 1 毫秒:中止线程是一种解决方案。避免大量的线程(超过十个线程是有问题的:线程之间的切换会降低你的性能,堆栈空间会吃掉所有内存并且通常同步状态跨线程很有趣)。考虑不要重新启动表现不佳的“脚本”——这样您就不必担心过多的 Thread.Abort 调用。请注意,不需要杀死线程将杀死与“脚本”相关的所有内容,因为它可能已经产生了自己的线程/异步操作/线程池任务......
关于c# - 我应该在自己的线程中运行每个插件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7155481/