Multithreading 伪实时线程

Multithreading 伪实时线程,multithreading,user-interface,asynchronous,real-time,threadpool,Multithreading,User Interface,Asynchronous,Real Time,Threadpool,所以我构建了一个小应用程序,它有一个物理引擎和一个显示器。显示器连接到处理物理引擎的控制器(实际上是处理控制器的视图模型,但不包括细节) 当前,控制器是一个委托,它由begin调用激活,由cancellation令牌停用,然后由endinvoke获取。在lambda笔刷的内部,PropertyChanged(连接到INotifyPropertyChanged)保持UI最新 据我所知,BeginInvoke方法激活的是一个任务,而不是另一个线程(在我的计算机上,它确实激活了另一个线程,但从我所做的

所以我构建了一个小应用程序,它有一个物理引擎和一个显示器。显示器连接到处理物理引擎的控制器(实际上是处理控制器的视图模型,但不包括细节)

当前,控制器是一个委托,它由begin调用激活,由cancellation令牌停用,然后由endinvoke获取。在lambda笔刷的内部,PropertyChanged(连接到INotifyPropertyChanged)保持UI最新

据我所知,BeginInvoke方法激活的是一个任务,而不是另一个线程(在我的计算机上,它确实激活了另一个线程,但从我所做的阅读来看,这不是一个保证,它取决于线程池希望如何完成任务),这在我所做的所有测试中都很好。lambda直到CancellationToken被杀死才完成。它有一个睡眠和一个更新(所以它有点像一个实时物理引擎……它很粗糙,但我不需要实时的精确性,只需要有感觉就可以了)


我的问题是,这会在其他计算机上工作,还是应该切换到启动并取消的显式线程?我想到的场景是在单核处理器上,第二个任务是否可能会大大减少处理器时间,从而使我的可接受的不准确模型变得不可接受的不准确(即在切换前等待毫秒而不是微秒?)。或者他们是我没有想到的更好的方法吗?

根据我的经验,以您所描述的方式使用线程池可以在大多数计算机上保证合理的最佳性能,而无需您费事找出如何分配线程

一根线和一个核不是一回事;在单核机器上仍然会有多个线程,这些线程将各自承担部分处理负载。除非对线程执行一些不寻常的操作,比如给予其中一个线程实时优先级,否则您将无法获得所描述的“死锁”情况


这就是说,微秒对于线程之间的上下文切换来说不是很多时间,所以YMMV。你必须尝试一下,看看效果如何;可能需要一些调整。

这是.NET吗?如果是这样,您可能希望将您的问题以及您正在使用的编程语言标记为这样。