请教高手:线程问题!!!!!!

cnscc 2002-07-18 08:37:14
多线程程序中,一般启动多少个线程之后,由于线程切换等原因可能会影响到系统的性能,使系统的性能反而下降。
同时运行100个线程会使系统性能反而下降吗?为什么?
...全文
20 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Thalses 2002-07-19
  • 打赏
  • 举报
回复
我也曾经做过串口通讯软件,当时做的是Windows32API通讯函数的打包工作。把输入输出分为两个线程,当数据量在14400左右时,输入线程的工作压力很小,大部分时间是被阻塞的。不太理解为什么会有那么多输入线程,不过一百个对于CPU来说绝对不多,但对于串口重叠读写来说可能就有问题了。
cnscc 2002-07-19
  • 打赏
  • 举报
回复
???
cnscc 2002-07-19
  • 打赏
  • 举报
回复
关键事发送要对32个口分别做流量控制和负载平衡,对不同口来的数据要分别处理,所以线程开的多。如楼上anhb(安安) 所言,是否要对每一个消息启动一个线程,发送完毕后结束,因为对一个口发送要做流量控制,即发送一些数据后可能要等待一段时间,但其他口可能有数据要发送,因此要启动不同的线程
anhb 2002-07-19
  • 打赏
  • 举报
回复
你可以在处理前启动固定个数的THREAD(可配置),在这些线程中等待消息,收到请求后处理发送,这样就不会丢失数据(消息队列异步功能),又能保证速度;主线程中按一定规则向上面的这些TRHEADS分发消息。或动态调节THREAD数量(按需启动/终止)。
jfzsl 2002-07-19
  • 打赏
  • 举报
回复
gz
tingyu007 2002-07-18
  • 打赏
  • 举报
回复
建议参考一下COM编程指南中的线程一章
ufox 2002-07-18
  • 打赏
  • 举报
回复
我仔细考虑过用信号WaitForMultipleObjects(...),但会出现问题,如下面文章所提到的问题:http://www.csdn.net/expert/topic/684/684823.xml?temp=.550976。

如果第一个信号源源不断的来,则后面的所有都不能处理了,所以只好考虑针对每个串口分别开一个读写线程
e2wugui 2002-07-18
  • 打赏
  • 举报
回复
线程多了肯定要占用资源,但是切换就要看工作忙不忙了。

如果多数时候都在睡觉,就是就绪状态的很少,那么并没有多少切换的开销。

另外,如果线程做的事情很简单(时间少花得很少),在忙的时候,切换过多就不好了。

串口读写应该不会很忙吧!毕竟是慢速io处理。

如果线程可以较少很多麻烦而不是增加的话,可以考虑使用,不用客气。

Semigod 2002-07-18
  • 打赏
  • 举报
回复
如果你的线程中往往有很多时间是在等待的话,就不多,否则,就得看你的机器性能了。对于现在的机器,100个不算太多。毕竟线程切换很快的
cnscc 2002-07-18
  • 打赏
  • 举报
回复
线程中执行串口读写操作,我要作的是32口的串口读写并作一定处理,老兄有什么其他好的办法吗?对每一个串口收到的数据要分别由一个线程处理,对要发送的数据用一个线程也不好解决,所以只有想到再用32个线程了。再加上其他的,供给70个左右,可能太多了吧??
Crob 2002-07-18
  • 打赏
  • 举报
回复
要根据你线程中执行的内容来看了

15,471

社区成员

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

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