多线程似乎一直给我们这样的印象就是多线程比单线程快,其实这是一个伪命题.事无绝对,多线程有时候确实比单线程快,但也有很多时候没有单线程那么快. 首先简单区分一下并发性(concurrency)和并行性(parallel).并行是说同一时刻有多条命令在多个处理器上同时执行.并发是说同一时刻只有一条指令执行,只不过进程(线程)指令在CPU中快速轮换,速度极快,给人看起来就是”同时运行”的印象,实际上同一时刻只有一条指令进行. 但实际上如果我们在一个应用程序中使用了多线程,线程之间的轮换以及上下文切换是需要花费很多时间的,这样的话当我们执行类似循环之类的操作的时候,是不是就意味着单线程一定会比多线程快呢(因为单线程的执行没有线程切换的时间消耗),

public class ConcurrencyTest {private static final long count = 1000000000;public static void main(String[] args) {try {concurrency();} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}serial();}private static void concurrency() throws InterruptedException {long start = System.currentTimeMillis();Thread thread = new Thread(new Runnable() {@Overridepublic void run() {int a = 0;for (long i = 0; i < count; i++){a += 5;}}});thread.start();int b = 0;for (long i = 0; i < count; i++){b--;}thread.join();long time = System.currentTimeMillis() - start;System.out.println("concurrency : " + time + "ms,b=" + b);}private static void serial() {long start = System.currentTimeMillis();int a = 0;for (long i = 0; i < count; i++){a += 5;}int b = 0;for (long i = 0; i < count; i++){b--;}long time = System.currentTimeMillis() - start;System.out.println("concurrency : " + time + "ms,b=" + b);}}

这段代码的运行结果是当count值比较小的时候单线程的运行速度比多线程要快,当count的值比较大的时候多线程的速度大概会是单线程的两倍为什么会这样呢,理论上来说执行上述这种代码操作单线程不需要上下文切换应该肯定比多线程要快才对呀. 其实是因为我们异想天开了,CPU的资源又不是全部都给你这个Java程序使用的,别的程序也要占用CPU资源啊.比如说当我们这个程序还没有运行的时候其实可能操作系统中已经有50个线程在运行了,那么当我们这个程序运行的时候,单线程就会占用CPU51分之1的时间(假设每个线程占用时间相等),多线程就会占用CPU52分之2的时间,你说哪个会运行的更快呢.当然当数量比较少的时候上下文之间的轮换会占用相对较多的时间所以这个时候虽然多线程占用CPU52分之2的时间,但是切换也需要很多的时间所以就比单线程要慢
.

多线程一定比单线程快吗相关推荐

  1. 三十四、多线程真的比单线程快?

    @Author: Runsen 文章目录 多线程不一定比单线程快 GIL不是Python的特性 GIL本质就是一把互斥锁 计算密集型 事实上,Python 多线程另一个很重要的话题叫,GIL(Glob ...

  2. 多线程就一定比单线程快吗?

    为什么要使用多线程?   在探讨文章题目之前,我们先来思考这样一个问题,你为什么要使用多线程?我相信很多人在遇到这个问题时会不假思索的回答出答案,因为并发快,那为什么并发快呢? 对于多核 CPU 来说 ...

  3. 多线程为什么比单线程快呢?

    多线程为什么比单线程快呢? 单线程的也就是程序执行时,所跑的程序路径(处理的东西)是连续顺序下来的,必须前面的处理好,后面的彩绘执行到.  多线程嘛,举个例子也就是说程序可以同时执行2个以上相同类似的 ...

  4. python多线程不能利用多核cpu,但有时候多线程确实比单线程快。

    python 为什么不能利用多核 CPU  GIL 其实是因为在 python中有一个 GIL( Global Interpreter Lock),中文为:全局解释器锁.  1.最开始时候设计GIL是 ...

  5. 多线程一定比单线程效率更高吗?

    单线程的也就是程序执行时,所跑的程序路径(处理的东西)是连续顺序下来的,必须前面的处理好,后面的才会执行到. 而多线程,举个例子也就是说程序可以同时执行2个以上相同类似的操作,比如一些搜索代理或者群发 ...

  6. 从单机到多机:多机一定比单机快吗?秒杀系统到底有没有必要用分布式锁?

    从单机到多机:多机一定比单机快吗?秒杀到底有没有必要用分布式锁? 一.单机场景 单机能承受的 TPS tomcat 500~1000 mysql 200~800 在单机状态下,tomcat 能接受的请 ...

  7. 多线程编程和单线程编程_生活与编程的平行线程

    多线程编程和单线程编程 I'm convinced our deepest desire is, by paying the cost of time, to be shown a glimmer o ...

  8. python io密集 多线程_python多进程和多线程究竟谁更快(详解)

    python3.6 threading和multiprocessing 四核+三星250G-850-SSD 自从用多进程和多线程进行编程,一致没搞懂到底谁更快.网上很多都说python多进程更快,因为 ...

  9. 浏览器多线程和js单线程

    0.前言 开发过程中遇到js线程和ui渲染线程互斥问题.导致ui无法正常更新等问题.这些问题的根源就是因为浏览器的多线程和js的单线程引起的. 看本篇博客之前,应该充分理解消息队列,事件循环,同步异步 ...

最新文章

  1. WTL中CMemDC与CDC、CDCHandle的联系
  2. 给女朋友讲ActiveMQ是啥?
  3. IDOC实例,消息方式的IDOC
  4. 关于持续集成,质量管理,工具等
  5. Redis 多机服务 : 主从同步、哨兵、集群
  6. php什么是阵列,php – 功能阵列的替代方法?
  7. 浅谈:ArrayList,ListT,ListObject
  8. linux条件测试的三种,shell编程之条件测试 | 旺旺知识库
  9. ocp证书怎么考_没有基础怎么考初级会计证书?
  10. android查询所有照片,Android查询外部存储中所有照片
  11. python 获取当前路径_Python获取当前路径实现代码
  12. java题库管理系统java试题管理系统java考试管理系统
  13. Tomcat Get请求中文乱码
  14. android webview 下载事件,Android使用WebView实现文件下载功能
  15. PC机通过二层交换机连接三层交换机
  16. sqli-labs(46-49)
  17. 聊聊Java中代码优化的30个小技巧
  18. 图片预览(原生js实现)
  19. Serial Box for Mac(软件序列号查询工具)
  20. HTML JavaScript

热门文章

  1. Acalvio正式推出其新型安全防御技术——流欺骗
  2. Rxjava与Retrofit的使用
  3. zookeeper web ui--gt;node-zk-browser安装
  4. 杭州找Android工作的点点滴滴
  5. shell编程中的select用法
  6. Android应用程序键盘(Keyboard)消息处理机制分析(8)
  7. ASP.NET基础教程-DataGrid表格控件-模板列的使用
  8. 哎!马上要涉水了,装修的水!
  9. php性能优化和细节优化
  10. 对四象限法则的一点思考