从任务角度上思考:在单核CPU上运行多线程程序有意义吗?

来源:7-1 常见面试问题

ych_1997

2019-11-06 20:27

问题假设: _ _ _ _ _ 为单位时间内CPU的工作状态。T为Thread, _ _ _ T _  表示单位时间内java程序只使用了 1/5的运算能力

具体任务:查询公司所有员工1~3年的考勤记录

单CPU单线程执行任务:

    一次性查询1~3年的的员工考勤记录

    CPU利用率: T  _ _ _ _ _T _ _ _ _ _ T _ _ _ _ _ 完成 , 使用了三个周期, 其他空闲的时间交给了操作系统的其他任务


单CPU多线程执行任务:导出1~3年的考勤记录

    使用三个线程分别查询第1年、第2年、第3年的员工考勤记录 T = T1 + T2 +T3

    单CPU多线程的CPU利用率: T1 _ T2 _ T3, 只使用了一个周期的时间完成任务。


我可不可以认为: 单CPU多线程,是尽力在压榨CPU的使用率。 

另外,当CPU已经被挤满。单CPU多线程的性价比应该辩证来看,如果有IO操作,依旧是高性价比的操作,

如果是查询公司所有员工1~3年的考勤记录,多线程的操作既增加了上下文切换也并没有成功压榨到CPU时间,所以性价比低。

以上是我的思考,想问悟空老师,我的想法是否有误区?


写回答 关注

1回答

  • 悟空
    2019-11-09 20:12:23
    已采纳

     单CPU多线程,是尽力在压榨CPU的使用率,是对的,如果有IO操作,很多线程会休息,如果单线程,那么CPU就休息。如果CPU已经被挤满,那么并不是说

    在单核CPU上运行多线程程序没有意义,而是说,线程的数量设置不合理,应该减少线程的数量。


    ych_19...

    明白,谢谢老师!

    2019-11-09 20:18:22

    共 1 条回复 >

Java并发编程的“基石”——多线程概念初识

开启并发世界大门,从搞定并发易混概念开始,迈好并发第一步

5107 学习 · 19 问题

查看课程

相似问题