多线程与多进程 执行效率
来源:互联网 发布:java怎么调用外部接口 编辑:程序博客网 时间:2024/06/08 15:46
1、多线程在单核和多核CPU上的执行效率问题的讨论
多线程在单cpu中其实也是顺序执行的,不过系统可以帮你切换哪个执行而已,其实并没有快(反而慢)。多个cpu的话就可以在多个cpu中同时执行了。单核CPU时使用多线程,通常是有线程要处于等待状态。而对于普通的进度条更新类的,能够简单控制的(比如:在循环里面手动处理消息)就简单控制,一般不使用线程,这样可以提高程序的性能。并且避免掉不必要的线程同步问题。
2、为什么有时候线程数超过CPU内核数会更快呢?
原因是这种程序的单个线程运算量不足以占满CPU一个内核(比如存在大量IO操作,IO比较慢,是程序瓶颈)。多线程的用处在于,做某个耗时的操作时,需要等待返回结果,这时用多线程可以提高程序并发程度。如果一个不需要任何等待并且顺序执行能够完成的任务,用多线程简直是浪费。
3、 线程越多越好吗?什么时候才有必要用多线程?
线程必然不是越多越好,线程切换也是要开销的,当你增加一个线程的时候,增加的额外开销要小于该线程能够消除的阻塞时间,这才叫物有所值。
4、多核与多线程
多核指的是CPU有多个核心,多线程是程序有多个线程在同时执行。多核也要用多线程才能发挥优势。同样,多线程要在多核上才能真正有优势。这点来说,对程序员不是透明的。程序员可以控制程序/线程在哪个CPU(核)上运行。用户也可以控制程序在哪几个核上运行。所以多核,多线程对用户和程序员都不是透明的。程序员必须了解这方面的知识。才能让程序最大限度的发挥机器的性能。
CPU分配时间片策略:
在并发运行中,CPU需要在多个程序之间来回切换,那么如何切换就有一些策略
3.1 先来先服务 - 时间片轮转调度
这个很简单,就是谁先来,就给谁分配时间片运行,缺点是有些紧急的任务要很久才能得到运行。
3.2 优先级调度
每个线程有一个优先级,CPU每次去拿优先级高的运行,优先级低的等等,为了避免等太久,每等一定时间,就给线程提高一个优先级
3.3 最短作业优先
把线程任务量排序,每次拿处理时间短的线程运行,就像我去银行办业务一样,我的事情很快就处理完了,所以让我插队先办完,后面时间长的人先等等,时间长的人就很难得到响应了。
3.4 最高响应比优先
用线程的等待时间除以服务时间,得到响应比,响应比小的优先运行。这样不会造成某些任务一直得不到响应。
3.5 多级反馈队列调度
有多个优先级不同的队列,每个队列里面有多个等待线程。
CPU每次从优先级高的遍历到低的,取队首的线程运行,运行完了放回队尾,优先级越高,时间片越短,即响应越快,时间片就不是固定的了。
队列内部还是用先来先服务的策略。
- 多线程与多进程 执行效率
- 多线程与多核执行效率
- 多进程与多线程(七)--多线程效率(转)
- Python中单线程、多线程与多进程的效率对比实验
- Python中单线程、多线程与多进程的效率对比实验
- 多线程与多进程
- 多线程与多进程
- 多线程与多进程
- 多线程与多进程
- 多进程与多线程
- 多进程与多线程
- 多进程与多线程
- 多线程与多进程
- 多进程与多线程
- 多进程与多线程
- 多线程与多进程
- 多进程与多线程
- 多进程与多线程
- 【贪心】codeforces 825D Suitable Replacement
- Hibernate Validator参数校验
- 素数筛选:HDU2710-Max Factor
- (2017多校训练第二场)HDU
- MOOC清华《程序设计基础》第7章:统计在线时长
- 多线程与多进程 执行效率
- 链接收藏3
- Struts转换器和错误提示
- 记一次获得 3 倍性能的 Go 程序优化实践,及 on-cpu / off-cpu 火焰图的使用
- CSU 1562Fun House
- css两列布局
- 免费免备案空间集合
- Hdu 1512 Monkey King 左偏树 解题报告
- 【Javascript笔记】1.1Javascript简介