线程与定时器的区别
发布日期:2021-07-01 04:03:22
浏览次数:2
分类:技术文章
本文共 972 字,大约阅读时间需要 3 分钟。
文章目录
1. 软件定时器
-
优点:使用简单,仅需设置一个时长和其OnTime事件即可使用。
-
缺点:
- (1)速度方面,软件定时器的精度比较低,这是由Windows不实时的特性所决定的,在XP下,如果关闭所有能关闭的进程,MFC的软件定时器可以达到接近15ms的精度,而在Win2000下,其能达到接近10ms的精度。但是实际情况是,有些进程是不可以关闭的,比如说数据库服务器,所以MFC的软件定时器能够达到的精度一般情况下在40ms左右,BCB和delphi就更差一点,大概在55ms左右。QueryPerformanceCounter倒是可以大幅提高精度,但是稳定性欠佳。
- (2)效率方面,软件定时器其本质实际上是在消息循环中处理WM_TIMER消息,而WM_TIMER消息在消息队列中是一个低级别的消息,所以定时器并不能完全保证处理时间间隔的准确性。另外,Timer占用的是主线程的资源,看似并行实际上是串行,所以窗体的消息队列一旦堵塞,就会造成系统假死或者运行缓慢,这对于UI来说几乎是无法忍受的。
2. 多线程
多线程技术是在控制工程中常用的技术,因为在闭环系统中有着大量的数据处理,这些处理显然不可能放在主线程中处理,绝大多数都是在线程中使用。多线程的优点比较明显,就是把费劲的东西扔到后台去,而且对CPU的利用率比较高。如果控制的好,多线程几乎是没有什么缺点的,但实际上控制的好的并不多。原因如下:
-
(1)时间片不可控,抢CPU资源的事情~一般人说不清;
-
(2)同步比较复杂,容易发生死锁,3条线程同步一般就能把人折腾死。同步我比较喜欢用临界区,原因也很简单:因为临界区比较简单……
3. 比较
- 多线程:“同时”执行的多个任务,多线程相对复杂一些,占用系统资源略多一些,所以如果能不用多线程时尽量不用。
- 定时器:可以看作是在本线程内插入的任务,程序中开启两个定时器,给人的假象是好像是同时进行。其实不然,就是赤裸裸的串行,除去定时器的串行运行,以及效率不说,他其实和线程差不多少。
总结
- 在运行几个耗时的功能的时候,尽可能的去用线程,而不是定时器,虽然定时器很简单,容易维护
- 定时器并没有减少程序的运行时间,以及内存。只不过是代码相对于好写,好维护些而已
- 如果需要多个任务同时执行,就要用多线程;如果需要每隔一段时间做某件事就用定时。
转载地址:https://miracle.blog.csdn.net/article/details/112216771 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
很好
[***.229.124.182]2024年04月21日 10时17分53秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Linux常用的安全工具
2019-05-01
python 多进程之进程池的操作
2019-05-01
flask整理之 flask程序中的debug模式
2019-05-01
比特币,父母这一辈能接受吗?
2019-05-01
SnapEx的新感觉,对新手很友好
2019-05-01
首个聚合器怎么产生的,并运用领域在什么
2019-05-01
区块链技术应用,最先医疗行业
2019-05-01
新币上市旧币会降价吗
2019-05-01
当博士进入币圈会怎么样
2019-05-01
《增长黑客》(肖恩·艾利斯)学习笔记——第二部分 实战
2019-05-01
python使用HTMLTestRunner查看运行函数
2019-05-01
linux下安装jenkins+git+python
2019-05-01
解决uiautomatorviewer中添加xpath的方法
2019-05-01
性能测试的必要性评估以及评估方法
2019-05-01
Spark学习——利用Mleap部署spark pipeline模型
2019-05-01
Oracle创建表,修改表(添加列、修改列、删除列、修改表的名称以及修改列名)
2019-05-01
使用redis实现订阅功能
2019-05-01
对称加密整个过程
2019-05-01
java内存模型
2019-05-01