vb.net - 使用线程处理简单的任务有意义吗?
问题描述
我正在为娱乐飞行模拟器编写一个软件,它应该在 VB.Net 中模拟一些飞机系统,但飞行动力学除外。
例如,程序根据可用的电源计算应打开或关闭的模拟“断路器/继电器”,这会导致以下功能:
If PwrSrc.avail = true and Breaker.hasFailed = false then
Breaker.close
End if
代码应该每 X 毫秒运行一次,但软件还需要计算其他系统状态,如油、气动等。
为每个模拟系统运行一个线程是否有意义,还是使用单个线程会更快?
稍后将添加更多功能并且系统将变得更加复杂,例如液压系统的压力值或电气系统的存储电池能量。一开始它应该只是一个非常基本的模拟。
如果在“第一个”模拟步骤中某些数据对其他线程不可用/有效,这对我来说不是一个(巨大的)问题。就像在第一个“电气系统”线程完成后设置“电动液压泵功率可用性”一样,并且不会是“液压系统”线程第一次运行的正确值,因为它可能使用来自先前模拟步骤的数据.
解决方案
在这里,您可以使用多线程,也可以使用基于事件来更好地利用资源。使用 oberables,然后订阅这些事件,例如油检查/和您在描述中提到的其他事件。根据事件创建一个线程,该线程将处理您的请求。使用线程池也可以更好地利用资源。线程没有确切的用例。如果您想将主线程的负载减少到其他线程,那么您可以继续实施它。但在进入主题之前,请先看看以下几点,
- 我要在多个线程之间共享全局变量吗?然后需要注意数据同步
- 尽可能使用线程池。
- 在必要时使用基于事件的东西。
- 不要忘记在使用后关闭资源,例如关闭线程池。
- 根据您的 CPU 内核设置线程池的大小,如内核数 * 2。
推荐阅读
- python - pytesseract.image_to_string() 没有给出任何输出
- android - Android重新加载网格视图自定义适配器
- reactjs - React Production Build 在页面刷新时显示 404
- r - 计算R中时间戳的重叠
- php - Plesk/PHP 仅接受来自您的域的请求
- c# - 在 Asp.Net Core 2.x 中使用查询字符串重定向
- javascript - 自定义钩子是像函数组件 wrt 钩子这样的特殊功能吗?
- javascript - 如何修复仅在重新加载时更新的断点?
- python - Python - 遍历关键字列表并遍历句子以查找关键字与单词“access”之间的匹配数
- json - node_modules 下的 TypeScript 模块,但部署在 wwwroot 下