当前位置:首页 > .NET > C#

关于线程池有与多线程解决方案

优良自学吧提供关于线程池有与多线程解决方案,关于线程池有与多线程我是程序是用在工业自动设备里的大概有10个线程,线程里大多数时间都是等待传感器到位的 如 While(还没有到位) {Thread.sleep(100);} 线程之间使用外部的变量进行简单的通信,线程里也会更新主界面的UI Thread RunThread;//线程的声明  

关于线程池有与多线程
我是程序是用在工业自动设备里的大概有10个线程,线程里大多数时间都是等待传感器到位的

While(还没有到位)
{Thread.sleep(100);}


线程之间使用外部的变量进行简单的通信,线程里也会更新主界面的UI

Thread RunThread;//线程的声明
   
if (RunThread == null || (!RunThread.IsAlive))//线程的启动
 {
  RunThread = new Thread(RunPro);
    RunThread.IsBackground = true;
     RunThread.Start();
}

if (RunThread != null && RunThread.IsAlive)//线程的放弃
 {RunThread.Abort();}

 public void RunPro()///线程实现
{
this.Invoke(new Action(() => { 更新UI; }));//
}



我觉得10个线程太多了,可能会出现问题
是不是应该使用线程池呢?
1,我用以上那种方式会出现问题吗?
2,是不是应该用线程池,它有什么优点?
3,我上网找了一下发觉线程池例子很多,但不知用哪一个形式,求推荐一下?
------解决思路----------------------
性能问题,跟线程池没有直接关系,线程池只是“实现时”的一种工具而已。

这里的关键是,
1. 多个线程在那里来回切换地挂着windows线程调度系统,什么也不干在那儿玩儿cpu呢?
2. 而且任务的“出处”应该是比较底层高效率的机制,不是什么“你的程序去轮询它”而应该是它来调用你的程序.
3. 10个线程可能太少(也许需要350个),也可能太多(也许需要2个),想当然地弄一个“10线程”这个数字根本就是只中看的“阿斗”,它不能自动根据系统性能而调整并发数。

因此最根本的问题是,你搞什么“死循环、阻塞”的线程,这就是多余的。你还把这些都到线程池里,也不会有任何好处。如果你不能把流程设计为“在一定事件发生时才启动线程,并且在十几毫秒进行完处理之后就结束线程”,如果你还是“死循环、阻塞”的编程思想,那么谈“线程池”这个名词儿反而是没用的,因为你不会在十几毫秒之后把线程归还线程池的,线程池对你现在这种流程设计方式根本没用。
------解决思路----------------------
你这个应用,完全可以用单线程分别去处理,用不到多线程

反正你检测传感器是否到位的通信线程肯定也是只有1个,而不是开10个线程分别去检测10个传感器

你直接获取到传感器状态之后直接判断不好吗

(本文来自互联网,不代表搜站(http://www.ylzx8.cn/)的观点和立场)
本站所有内容来自互联网,若本站收录的信息无意侵犯了贵司版权,请给我们来信(ylzx8cn@163.com),我们会及时处理和回复,谢谢