多线程间切换周期

花开花折 2014-08-03 02:20:05
硬件平台: Win7 系统 I5处理器  4G内存
软件平台: VS2010 C#  桌面应用程序


   A: 最近做一项目,对实时性要求有点高。在项目应用程序中,开了6个线程,但总感觉线程间切换的实时性偏低。


   B:有把线程及进程的优先等级调高一个级别,但效果不明显。


  现求助各位:  1: 怎样提高线程的实时性,缩短“时间片”?

          2: 正常情况下线程间切换周期大概多长时间?
 
          3: 相关资料介绍?
 
 

    谢谢。
...全文
289 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
ZyxIp 2014-08-05
  • 打赏
  • 举报
回复
线程多并不代表执行速度快,效率高。 主要还是看你的设计和业务
於黾 2014-08-04
  • 打赏
  • 举报
回复
那么厨师2,3,4应该同时去执行步骤2,3,4, -> 厨师2先打鸡蛋,然后煎鸡蛋,然后装盘 厨师3打另一个鸡蛋,煎鸡蛋,装盘 厨师4一样 而不是厨师2只负责打鸡蛋,厨师3和4在旁边边睡觉边等
於黾 2014-08-04
  • 打赏
  • 举报
回复
如果串口来的数据很快,而处理的慢,你可以开多个线程同时处理 比如上面的煎鸡蛋的例子中 如果厨师1一次性买回了很多鸡蛋,他自己肯定是忙不过来 那么厨师2,3,4应该同时去执行步骤2,3,4,这样才能加快效率 而不是分别去执行一个步骤.
於黾 2014-08-04
  • 打赏
  • 举报
回复
如果你开了100个线程,需要线程1执行完了再执行线程2,线程2执行完了再执行线程3... 那你不如让一个线程自己执行所有代码,还更好些. 好比你有一个煎鸡蛋的工作,必须厨师1去买鸡蛋,买回来之后厨师2打鸡蛋,厨师3煎鸡蛋,厨师4装盘子 你觉得效率能高么. 厨师1买回来还要先通知厨师2,厨师2如果在睡觉,还要先等他睡醒了. 为什么不让厨师1自己把活都干了?
moonwrite 2014-08-04
  • 打赏
  • 举报
回复
只能回答第三个问题:《CLR via C#》
於黾 2014-08-04
  • 打赏
  • 举报
回复
抓取图像 分析图像 写入分析结果各一个线程 你这几个线程间有执行顺序依赖关系,需要线程同步 所以多线程根本没意义.
会飞的溜溜 2014-08-04
  • 打赏
  • 举报
回复
这个东西得看你的程序了逻辑: http://www.cnblogs.com/c6000/archive/2012/10/11/2720611.html 这个可以 帮你优化线程
会飞的溜溜 2014-08-04
  • 打赏
  • 举报
回复
是要提高性能吗
会飞的溜溜 2014-08-04
  • 打赏
  • 举报
回复
引用 3 楼 u010909114 的回复:
[quote=引用 1 楼 sp1234 的回复:] 没看懂。也许是不知道你的程序到底干什么。 1. 一个进程总是开“6个线程”,这是干什么呢?一个进程应该随着需要而使用线程。可能一瞬间需要使用30个线程,可能一瞬间只需要1个子线程,可能一段时间内根本不使用任何子线程(等待事件触发嘛)。怎么会是“循环、阻塞、死等”什么东西呢?如果你在那里“循环、阻塞、死等”,那么我相信就凭你的这个算法,真正有任务时也不可能有足够的并发能力去处理,可能因为阻塞而变慢。 2. 谁跟你说过线程的目的是“提高线程的实时性”?多线程处理,那么每一个任务单独看,肯定比顺序执行时要慢了许多。怎么可能“提高”呢? 线程的目的到底是为什么,你了解过吗?
不好意思,没表达清楚:       A: 我是写一自动化设备控制程序+视觉处理(2个相机)    B: 控制设备运行一个线程,抓取图像 分析图像 写入分析结果各一个线程    C: 主要是有一个线程扫描IO口状态,当外部状态发生变化时,程度能即时捕获状态(硬件时钟扫描周期能满足),主要是想表达这个意思。    谢谢[/quote] 你是不是想抓图的数据读入的同时进行分析扫描,分析扫描同步写入分析
暈哥 2014-08-03
  • 打赏
  • 举报
回复
时间片大约30ms windows谈个屁的实时性啊 想让你程序看起来更“实时”,可以拼CPU,多核超线程啥的,也可以提升进程和线程的优先级,尽量运行更少的程序。
largeskymengsk 2014-08-03
  • 打赏
  • 举报
回复
在现在使用的Windows系统来说,你可以认为操作系统切换线程的时间 片是:15MS 但是记住,Windows本身是一个抢占式的操作系统.
rtdb 2014-08-03
  • 打赏
  • 举报
回复
“线程间切换的实时性”这个概念不对头。 现在都有4个CPU了,理论上多个线程是可以并发运行的。 你要先查是哪个线程响应速度不够
花开花折 2014-08-03
  • 打赏
  • 举报
回复
引用 1 楼 sp1234 的回复:
没看懂。也许是不知道你的程序到底干什么。 1. 一个进程总是开“6个线程”,这是干什么呢?一个进程应该随着需要而使用线程。可能一瞬间需要使用30个线程,可能一瞬间只需要1个子线程,可能一段时间内根本不使用任何子线程(等待事件触发嘛)。怎么会是“循环、阻塞、死等”什么东西呢?如果你在那里“循环、阻塞、死等”,那么我相信就凭你的这个算法,真正有任务时也不可能有足够的并发能力去处理,可能因为阻塞而变慢。 2. 谁跟你说过线程的目的是“提高线程的实时性”?多线程处理,那么每一个任务单独看,肯定比顺序执行时要慢了许多。怎么可能“提高”呢? 线程的目的到底是为什么,你了解过吗?
不好意思,没表达清楚:       A: 我是写一自动化设备控制程序+视觉处理(2个相机)    B: 控制设备运行一个线程,抓取图像 分析图像 写入分析结果各一个线程    C: 主要是有一个线程扫描IO口状态,当外部状态发生变化时,程度能即时捕获状态(硬件时钟扫描周期能满足),主要是想表达这个意思。    谢谢
  • 打赏
  • 举报
回复
回答你后一个问题:“正常情况下线程间切换周期大概多长时间?” 这又无数的资料。在很多年以前,windows的桌面系统默认地“抢先式线程调度”机制,每隔几十毫秒(不超过50毫秒)就切换一次线程。现在的windows系统只可能缩短,应该不会延长。 你的问题应该是程序设计问题,不是线程切换周期长短的问题。
  • 打赏
  • 举报
回复
没看懂。也许是不知道你的程序到底干什么。 1. 一个进程总是开“6个线程”,这是干什么呢?一个进程应该随着需要而使用线程。可能一瞬间需要使用30个线程,可能一瞬间只需要1个子线程,可能一段时间内根本不使用任何子线程(等待事件触发嘛)。怎么会是“循环、阻塞、死等”什么东西呢?如果你在那里“循环、阻塞、死等”,那么我相信就凭你的这个算法,真正有任务时也不可能有足够的并发能力去处理,可能因为阻塞而变慢。 2. 谁跟你说过线程的目的是“提高线程的实时性”?多线程处理,那么每一个任务单独看,肯定比顺序执行时要慢了许多。怎么可能“提高”呢? 线程的目的到底是为什么,你了解过吗?

111,120

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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