线程池和单独线程以及循环该怎么选择。

顾小白xx 2021-02-22 11:12:08
首先场景是,我需要检测一定数量的传感器,因为都是实时数据所以当然精度越高越好,我目前使用的是开启一个线程然后里面不断的检测 12个传感器的数据,因为有的时候不一定12个全部开启所以一定程度上造成了浪费而且效率其实很低,如果只使用一个的话,剩下的11个同样要执行必然会造成浪费。所以我考虑是不是要改成12个传感器每个传感器使用一个线程需要的时候开启不需要的时候就不开启,这样的话使用线程池应该是最快的避免了资源浪费和不必要的切换,可以解决我上面的问题,有任务的时候才执行,并且不管你开启几个线程的调度基本不用管,有任务就执行就行了。由于小弟对线程和线程池不是特别熟所以无法确定到底使用线程池好还是单独的线程就行了呢。大家给点意见最终目的肯定是提高传感器的采集的精度和效率。
...全文
282 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
叶恭介叶恭介 2021-02-25
  • 打赏
  • 举报
回复
modbus不是TCP协议吗?是TCP就一个线程就好啦。 可以联系我,大家一起商量
顾小白xx 2021-02-25
  • 打赏
  • 举报
回复
引用 8 楼 bluesen 的回复:
[quote=引用 7 楼 顾小白xx 的回复:][quote=引用 6 楼 bluesen 的回复:][quote=引用 5 楼 顾小白xx的回复:][quote=引用 3 楼 bluesen 的回复:][quote=引用 2 楼 顾小白xx 的回复:]我现在用的一个线程,然后一个for循环12次,也就是每次都要吧12传感器都读一次,然后等待40MS的时间反复执行。在循环里面每读取一次传感器大概有10ms的延迟。这样一想好像被modbus给拖累了,错过了好多数据。
那你就不要延迟40ms,短一点,比如1ms “好像...错过...数据”,不能凭想象,要测试,记录日志,然后分析。[/quote] MODBUS 公司用的接口里面默认10ms 的延迟,然后轮训的时候又加了40所以每两次的间隔就是50ms [/quote] 既然担心不能及时处理,你为啥还要加40ms?[/quote] 之前是怕读的太快引起modbus 的堵塞所以加了一个40ms 的等待时间[/quote] 你都怕太快还加了延时,那你弄多几个线程有啥必要,不是更快,更难控制?[/quote]所以我才来问问呢。。。
bluesen 2021-02-25
  • 打赏
  • 举报
回复
引用 7 楼 顾小白xx 的回复:
[quote=引用 6 楼 bluesen 的回复:][quote=引用 5 楼 顾小白xx的回复:][quote=引用 3 楼 bluesen 的回复:][quote=引用 2 楼 顾小白xx 的回复:]我现在用的一个线程,然后一个for循环12次,也就是每次都要吧12传感器都读一次,然后等待40MS的时间反复执行。在循环里面每读取一次传感器大概有10ms的延迟。这样一想好像被modbus给拖累了,错过了好多数据。

那你就不要延迟40ms,短一点,比如1ms
“好像...错过...数据”,不能凭想象,要测试,记录日志,然后分析。[/quote] MODBUS 公司用的接口里面默认10ms 的延迟,然后轮训的时候又加了40所以每两次的间隔就是50ms [/quote]
既然担心不能及时处理,你为啥还要加40ms?[/quote]
之前是怕读的太快引起modbus 的堵塞所以加了一个40ms 的等待时间[/quote]
你都怕太快还加了延时,那你弄多几个线程有啥必要,不是更快,更难控制?
顾小白xx 2021-02-25
  • 打赏
  • 举报
回复
引用 6 楼 bluesen 的回复:
[quote=引用 5 楼 顾小白xx的回复:][quote=引用 3 楼 bluesen 的回复:][quote=引用 2 楼 顾小白xx 的回复:]我现在用的一个线程,然后一个for循环12次,也就是每次都要吧12传感器都读一次,然后等待40MS的时间反复执行。在循环里面每读取一次传感器大概有10ms的延迟。这样一想好像被modbus给拖累了,错过了好多数据。
那你就不要延迟40ms,短一点,比如1ms “好像...错过...数据”,不能凭想象,要测试,记录日志,然后分析。[/quote] MODBUS 公司用的接口里面默认10ms 的延迟,然后轮训的时候又加了40所以每两次的间隔就是50ms [/quote] 既然担心不能及时处理,你为啥还要加40ms?[/quote] 之前是怕读的太快引起modbus 的堵塞所以加了一个40ms 的等待时间
bluesen 2021-02-24
  • 打赏
  • 举报
回复
引用 2 楼 顾小白xx 的回复:
我现在用的一个线程,然后一个for循环12次,也就是每次都要吧12传感器都读一次,然后等待40MS的时间反复执行。在循环里面每读取一次传感器大概有10ms的延迟。这样一想好像被modbus给拖累了,错过了好多数据。

那你就不要延迟40ms,短一点,比如1ms
“好像...错过...数据”,不能凭想象,要测试,记录日志,然后分析。
bluesen 2021-02-24
  • 打赏
  • 举报
回复
引用 5 楼 顾小白xx的回复:
[quote=引用 3 楼 bluesen 的回复:][quote=引用 2 楼 顾小白xx 的回复:]我现在用的一个线程,然后一个for循环12次,也就是每次都要吧12传感器都读一次,然后等待40MS的时间反复执行。在循环里面每读取一次传感器大概有10ms的延迟。这样一想好像被modbus给拖累了,错过了好多数据。
那你就不要延迟40ms,短一点,比如1ms “好像...错过...数据”,不能凭想象,要测试,记录日志,然后分析。[/quote] MODBUS 公司用的接口里面默认10ms 的延迟,然后轮训的时候又加了40所以每两次的间隔就是50ms [/quote] 既然担心不能及时处理,你为啥还要加40ms?
顾小白xx 2021-02-24
  • 打赏
  • 举报
回复
引用 3 楼 bluesen 的回复:
[quote=引用 2 楼 顾小白xx 的回复:]我现在用的一个线程,然后一个for循环12次,也就是每次都要吧12传感器都读一次,然后等待40MS的时间反复执行。在循环里面每读取一次传感器大概有10ms的延迟。这样一想好像被modbus给拖累了,错过了好多数据。
那你就不要延迟40ms,短一点,比如1ms “好像...错过...数据”,不能凭想象,要测试,记录日志,然后分析。[/quote] MODBUS 公司用的接口里面默认10ms 的延迟,然后轮训的时候又加了40所以每两次的间隔就是50ms
an_bachelor 2021-02-24
  • 打赏
  • 举报
回复
你先问问硬件商是否提供SDK,SDK中可能有通知模式的接口,又或者在硬件层面已经解决了这个轮询带来的问题。 没有你再自己来处理,可以用操作系统提供的重叠IO、IOCP等机制来获得通知。 https://docs.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-readfileex
顾小白xx 2021-02-23
  • 打赏
  • 举报
回复
我现在用的一个线程,然后一个for循环12次,也就是每次都要吧12传感器都读一次,然后等待40MS的时间反复执行。在循环里面每读取一次传感器大概有10ms的延迟。这样一想好像被modbus给拖累了,错过了好多数据。
bluesen 2021-02-23
  • 打赏
  • 举报
回复
你首先要判断采集单个传感器数据需要多少时间,假设是t,然后传感器要求的采样率是多少,假设要求每秒100次采样,则要求10ms完成一次采样,如果只用一个线程,那么12t 必须小于10ms。
考虑线程池是扯淡的,才12个传感器,要什么线程池啊。

15,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧