C# 我应该在每个插件各自的线程中运行它们吗?

C# 我应该在每个插件各自的线程中运行它们吗?,c#,multithreading,scripting,threadpool,C#,Multithreading,Scripting,Threadpool,在我的游戏中,用户可以加载自定义脚本。 通常会加载50-100个脚本。 每个脚本通过其更新方法在每个帧中调用 当一个脚本崩溃时,其他脚本不应受到影响 允许脚本更新方法每帧最多运行1毫秒。因此,我还需要能够中止冻结/未及时反应的脚本 我该怎么做?我认为每秒启动3000-6000个线程不是这里的最佳实践。 我也不能在循环中调用更新后启动线程并等待16毫秒,因为脚本需要与游戏同步。脚本取决于每个帧的运行情况 线程池是正确的选择吗?如果是这样,我该如何中止超时的脚本呢?简短:保护恶意代码很难 一,。当一

在我的游戏中,用户可以加载自定义脚本。 通常会加载50-100个脚本。 每个脚本通过其更新方法在每个帧中调用

  • 当一个脚本崩溃时,其他脚本不应受到影响
  • 允许脚本更新方法每帧最多运行1毫秒。因此,我还需要能够中止冻结/未及时反应的脚本
  • 我该怎么做?我认为每秒启动3000-6000个线程不是这里的最佳实践。 我也不能在循环中调用更新后启动线程并等待16毫秒,因为脚本需要与游戏同步。脚本取决于每个帧的运行情况


    线程池是正确的选择吗?如果是这样,我该如何中止超时的脚本呢?

    简短:保护恶意代码很难

    一,。当一个脚本崩溃时,其他脚本不应受到影响:要实现这一点,Windows中唯一可靠的方法是在单独的进程中运行每个脚本。例如,由“脚本”引起的StackOverflow异常将导致进程停止。跨进程通信不太可能轻松满足您的性能要求

    二,。1毫秒每个脚本:中止线程是一个解决方案。避免大量线程(超过十个线程是有问题的:在线程之间切换会降低性能,堆栈空间会消耗所有内存,通常跨线程同步状态很有趣)。考虑不要重启那些行为较差的“脚本”——这样你就不必担心太多线程。请注意,不需要终止线程将终止与“脚本”相关的所有内容,因为它可能产生了自己的线程/异步操作/线程池任务