前言:

面试官:多线程和单线程哪个快?
我凭借微弱的记忆以及正经分析回答:多线程快,因为可以执行多个任务,而单线程只能执行一个任务。
面试官:无论什么情况多线程都比单线程快吗?
我犹豫了一下正经回答:不是的,线程执行消耗的是cpu的,cpu资源是有限的,所有不是一直比单线程快。
面试官:那什么情况下单线程比多线程快?
我…:这…不清楚。
面试官:你没有学过《计算机基础》吗?你已经自相矛盾了…
我:没学过,好吧,我不知道。
后来这个面试官变成了我的老大,技术总监,进公司第一天下午讨论某问题之后单独叫我谈话。
老大问我那个问题有没有去了解过。
我虚了:我看了,不一定,多线程存在上下文切换。
老大:多线程一定比单线程慢,上下文切换你知道什么意思吗?
我心想完了:额…看了忘记了。
然后噼里啪啦跟我解释,我现在依旧忘记了…

正文:

回家后我再次查阅资料:

首先分配cpu资源的单位是进程。一个进程所获得到的cpu资源是一定的。程序在执行的过程中消耗的是cpu,比如一个单核cpu,多个线程同时执行工作时,需要不断切换执行(上下文切换),单个线程时间耗费更多了,而单线程只是一个线程跑。
比如:
处理10个报表,
在单线程的情况下,假如说我们生成10个报表文件需要1个小时。
单线程是先执行完第一个报表,用了6分钟,再执行第二个报表,也用6分钟。总计1个小时
多线程,是10个报表一起执行,但是每一个报表都要1个小时。
总结:多线程的总体执行时间和单线程是一样的,但是多线程中单个线程的执行时间是单线程的多倍。
多线程提高的是并发数量,比如现在有一个4核cpu的服务器,同一时间可执行4个线程,这样处理线程任务的速度比较快。但是多出来的线程,5个,6个,7个,多出的线程还是要等待。

上下文切换
多线程编程中一般线程的个数都大于 CPU 核心的个数,而一个 CPU 核心在任意时刻只能被一个线程使用,为了让这些线程都能得到有效执行,CPU 采取的策略是为每个线程分配时间片并轮转的形式。当一个线程的时间片用完的时候就会重新处于就绪状态让给其他线程使用,这个过程就属于一次上下文切换。

概括来说就是:当前任务在执行完 CPU 时间片切换到另一个任务之前会先保存自己的状态,以便下次再切换会这个任务时,可以再加载这个任务的状态。任务从保存到再加载的过程就是一次上下文切换。

后记:

基础不牢固的情况下去回答问题是非常容易打脸的,回答出的答案也是稀里糊涂的,稍微换个角度攻击就会一脸懵逼,学习更多的新技术其实没太大用处,因为这个行业技术迭代的很快,基础才是永久的饭碗,所以我决定从java虚拟机开始入手,修炼内功,找对方向获得会更多!

多线程为什么跑的比单线程还要慢?!相关推荐

  1. 【java多线程】多线程为什么跑的比单线程还要慢?!

    问:多线程是不是能加快处理速度? 解析: 在使用多线程时,一定要知道一个道理:处理速度的最终决定因素是CPU.内存等,在单CPU(无论多少核)上,分配CPU资源的单位是"进程"而不 ...

  2. Problem 58 怎样判断当前程序链接的是多线程版的Glibc还是单线程版的Glibc?

    Problem58 怎样判断当前程序链接的是多线程版的Glibc还是单线程版的Glibc? Ans: 在Linux程序设计当中,如果一个程序被设计成可以支持单线程或多线程的模式,可以当过弱引用的方法来 ...

  3. 多线程不能不知道的之单线程和多线程的比较

    早期的计算硬件十分复杂,但是操作系统执行的功能确十分的简单.那个时候的操作系统在任一时间点只能执行一个任务,也就是同一时间只能执行一个程序.多个任务的执行必须得轮流执行,在系统里面进行排队等候. 栗子 ...

  4. redis 多线程_Java架构师Redis单线程?别逗了,Redis6.0多线程重磅来袭

    2019年的 RedisConf 比以往时候来的更早一些,今年会议时间是4月1-3号,仍然是在旧金山鱼人码头Pier 27.恰逢今年是 Redis 第10周年,规模也比以往大一些,注册人数超过1600 ...

  5. java 单线程改多线程_帮我把单线程的程序改成多线程JAVA,急!

    /*SocketServer.java*/importjava.awt.*;importjava.awt.event.*;publicclassSocketServerextendsFrameimpl ...

  6. python多线程效率低_Python 多进程、多线程效率比较

    Python 界有条不成文的准则: 计算密集型任务适合多进程,IO 密集型任务适合多线程.本篇来作个比较. 通常来说多线程相对于多进程有优势,因为创建一个进程开销比较大,然而因为在 python 中有 ...

  7. 【大厂面试】面试官看了赞不绝口的Redis笔记

    文章目录 一.Redis简介 二.Redis API的使用和理解 (一)通用命令 (二)单线程架构 (三)数据结构和内部编码 (四)字符串 (五)hash (字典) (六)列表 (七)Set集合 (八 ...

  8. 单线程和多线程的优缺点(转)

    多线程处理的优点 同步应用程序的开发比较容易,但由于需要在上一个任务完成后才能开始新的任务,所以其效率通常比多线程应用程序低.如果完成同步任务所用的时间比预计时间长,应用程序可能会不响应.多线程处理可 ...

  9. 什么是单线程和多线程,单线程与多线程的区别

    什么是进程? 当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源. 而一个进程又是由多个线程所组成的. 什么是线程? 线程是程序中的一个执行流,每个线程都有自己的 ...

最新文章

  1. 水痘痊愈就能终生免疫?其实病毒仍潜伏在神经,随时以更可怕的形式爆发......
  2. c语言判断字符是否等于e,C语言如何实现删除字符串中的字符
  3. 230u拆解 网卡接口_全网首发 HP ProDesk 400 G5 Desktop Mini 九代1L小主机拆解评测
  4. qt 设置串口起始位_【IT专家】Qt:如何设置主窗口的初始位置?
  5. 系统运维:收集6款经典的服务器监控工具
  6. python虚拟环境打包deb_可以为python脚本创建deb包吗?
  7. html动画曲线快速结束,CSS3 animation动画
  8. 任正非称华为 6G 领先世界;支付宝小程序将与微博打通;Linux Kernel 5.3 发布 | 极客头条...
  9. python executemany_Python MySQLdb executemany
  10. 构建最基础的Spring项目及所需要的jar包
  11. 导入grafana的dashboards模板
  12. ios游戏使得newpad不断迅速增长
  13. 注意:QQ空间加密并不安全
  14. 10被动语态,双重所有格
  15. python基础练习题:查找首都【难度:1级】--景越Python编程实例训练营,不同难度Python习题,适合自学Python的新手进阶
  16. 新旧版MATLAB中的希尔伯特-黄变换(HHT)及其边际谱的求取问题
  17. PGN: 指针生成网络(Get To The Point: Summarization with Pointer-Generator Networks)
  18. RPG Maker mv框架代码解析之窗口文字显示
  19. [渝粤教育] 南京信息职业技术学院 模拟电子技术 参考 资料
  20. php操作pdf文档输出,PHP生成PDF文档实用技巧

热门文章

  1. linux服务器集群群发邮件,爱博邮件群发服务器(Linux版本)
  2. 倍福---CNC系统介绍
  3. PostgreSQL 时序数据案例 - 时间流逝, 自动压缩, 同比\环比
  4. python爬虫进阶-同城旅游酒店评价(JS逆向)
  5. Robocup 仿真2D 学习笔记(三)最初的改进1
  6. Invalid component name: “_compiled“. Component names should conform to valid custom element name组件报错
  7. WINCC的SQL应用,无需修改任何源码
  8. MySql简单入门_第四篇 高级使用(4)_触发器
  9. origin图例修改框框
  10. 身份验证中的allow users=\?\ /中的?和*各是什么意思?