许多人对于计算机的运行原理不了解,甚至根本不了解。

不幸的是,此类中的一部分人也参与了计算机的编码工作。可想而知,编写的效率和结果。听者伤心,闻者流泪。

此类同学的常见的误解:

  • 并发就能加快任务完成
  • 任务的总完成时间大约=单线程理论完成时间/线程个数

实际情况,和误解不同。

为何,主要因为以下几个因素:

1.计算机的配置

2.管理成本

3.任务性质

配置

每台计算器的配置都是有限的。譬如cpu可能是intel i9,或者i7,差的可能是i5,甚至更糟糕;而磁盘可能是老式的5400转的机械硬盘,或者是更快的

SSD。

不同的配置,决定了计算机每秒所能完成的任务数(计算次数),如果超过了配置,那么它也是无法完成的。

譬如有cpu,一秒只能执行500个计算。有1000万个运算的任务,以10000个一组,分为1000组(线程),在一秒内就可以完成吗?显然不是。

管理成本

操作系统创建线程,是需要耗费资源:存储空间。这些空间用于存储线程/进程信息。另外调度本身也是需要耗费时间的。

管理所耗费的时间,无形中也会减少可以实际用于计算的时间。

当然,在cpu足够强大,且线程不是很多的时候,可能不是一个大问题。

任务性质

不是什么任务都适合并发执行的。

譬如一个任务主要进行I/O,那么力图通过不合理的并发来提升效率是不可行。

又譬如力图从一个很慢的网站快速下载资源是很困难的,无论你增加了多少线程。

所以,在决定是否使用多任务之前,一定要仔细考虑该任务是否允许在特定的环境下使用。

如果不允许,还是老老实实地单发,或者把并发度设置为1。

只可惜,有许多初级程序员,或者一些没有啥理论的程序员不知道这些道理。

java多线程-3-使用多线程的时机的更多相关文章

  1. (原创)JAVA多线程一传统多线程

    一,多线程 多线程是提高程序效率,避免资源浪费的很好的解决方案,下面来慢慢的介绍多线程的一些基本知识,而这些是晋级高级不可或缺的一部分 1,Thread类 类实现多线程需要实现Runnable接口,我 ...

  2. Java学习手记2——多线程

    一.线程的概念 CPU执行程序,就好比一个人在干事情一样,同一个时间你只能做一件事情,但是这样的效率实在是太低了,在你用电脑的时候,听歌就不能浏览网页,看电影就不能下载视频,你想想是不是很蛋疼. 所以 ...

  3. java 并发性和多线程 -- 读感 (一 线程的基本概念部分)

    1.目录略览      线程的基本概念:介绍线程的优点,代价,并发编程的模型.如何创建运行java 线程.      线程间通讯的机制:竞态条件与临界区,线程安全和共享资源与不可变性.java内存模型 ...

  4. Java 并发性和多线程

    一.介绍 在过去单 CPU 时代,单任务在一个时间点只能执行单一程序.之后发展到多任务阶段,计算机能在同一时间点并行执行多任务或多进程.虽然并不是真正意义上的“同一时间点”,而是多个任务或进程共享一个 ...

  5. Java 并发和多线程(一) Java并发性和多线程介绍[转]

    作者:Jakob Jenkov 译者:Simon-SZ  校对:方腾飞 http://tutorials.jenkov.com/java-concurrency/index.html 在过去单CPU时 ...

  6. Java核心知识点学习----多线程中的阻塞队列,ArrayBlockingQueue介绍

    1.什么是阻塞队列? 所谓队列,遵循的是先进先出原则(FIFO),阻塞队列,即是数据共享时,A在写数据时,B想读同一数据,那么就将发生阻塞了. 看一下线程的四种状态,首先是新创建一个线程,然后,通过s ...

  7. Java并发性和多线程

    Java并发性和多线程介绍   java并发性和多线程介绍: 单个程序内运行多个线程,多任务并发运行 多线程优点: 高效运行,多组件并行.读->操作->写: 程序设计的简单性,遇到多问题, ...

  8. Java并发性和多线程介绍

    java并发性和多线程介绍: 单个程序内运行多个线程,多任务并发运行 多线程优点: 高效运行,多组件并行.读->操作->写: 程序设计的简单性,遇到多问题,多开线程就好: 快速响应,异步式 ...

  9. 带着新人看java虚拟机04(多线程篇)

    我记得最开始接触多进程,多线程这一块的时候我不是怎么理解,为什么要有多线程啊?多线程到底是个什么鬼啊?我一个程序好好的就可以运行为什么要用到多线程啊?反正我是十分费解,即使过了很长时间我还是不是很懂, ...

  10. 在java中怎样实现多线程?线程的4种状态

    一.在java中怎样实现多线程? extends Thread implement Runnable 方法一:继承 Thread 类,覆盖方法 run(),我们在创建的 Thread 类的子类中重写 ...

随机推荐

  1. [Gin] 运行模式检测和设置 (mode.go)

    // 设置方式 gin.SetMode(gin.ReleaseMode) // 检测方式 if gin.Mode() == gin.DebugMode { } 更多相关信息,建议直接去看源代码. Re ...

  2. Caused by: java.lang.ClassNotFoundException: org.apache.http.message.TokenParser

    写完程序启动不报错,执行时总是报错 java.lang.ClassNotFoundException: org.apache.http.message.TokenParser 认真检查代码没问题,试了 ...

  3. SAP集成技术(五)集成风格

    上一节介绍了各种集成架构,这一节将介绍各种集成风格(Style).我们在日常工作中使用这些集成风格来分类不同类型的集成场景.本文将遵循SAP的集成解决方案咨询方法(ISA - M)使用的方法,将集成风 ...

  4. Solution Set - 数学相关

    CF645F Link&Submission. 利用 \(\sum\limits_{d|n}\varphi(\frac{n}{d})=n\),只要对每个数 \(x\),求出 \(cnt_x\) ...

  5. CF-943(已更B-E)

    CF- 943(已更 B-E) D赛时没调出来(╬▔皿▔)╯,还有几分钟的时候反而把E过了,本来应该是上大分一场(⊙﹏⊙),等会会补G1 这假期要刷题,还要补文化课--后面有空的话更一下之前打的线下赛 ...

  6. 简说Python之面向对象

    目录 Python对象 对象的内置方法 __init__方法 __str__方法 对象的多态 对象的封装 对象的继承 之前介绍了函数.对象代表了什么.可以称为"一篮子"计划,把数据 ...

  7. GitHub总是打不开

    终极解决方案 http://tool.chinaz.com/dns?type=1&host=github.com&ip= github.com vim /etc/hosts 添加下面内 ...

  8. WebKist Inside: CSS 样式表的组成

    1 StyleSheet 一张 StyleSheet 由一系列 Rules 组成,这些 Rules 可以分成 2 大类: 1 Style Rule 2 At-Rule 下面的例子展示了 Style R ...

  9. 常回家看看之off_by_one

    off_by_one这个漏洞比较特殊,它不像上一期的堆溢出,可以溢出很多字节,它只能溢出一个字节,在栈里面也可以通过这个漏洞修改返回地址什么的,在堆里面我们主要利用它来修改堆块的大小,形成fake_c ...

  10. sass 导入@import详解

    @import ​ Sass 拓展了 @import 的功能,允许其导入 SCSS 或 Sass 文件.被导入的文件将合并编译到同一个 CSS 文件中,另外,被导入的文件中所包含的变量或者混合指令 ( ...