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

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

此类同学的常见的误解:

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

实际情况,和误解不同。

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

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. GtkSharp 设置窗口背景透明

    本文告诉大家如何在 GTK Sharp 里面设置窗口背景透明 在 GTK 里面设置窗口背景透明十分简单,只需使用如下代码即可 this.AppPaintable = true; var screen ...

  2. dotnet 6 HttpClientHandler 和 SocketsHttpHandler 有什么差别

    本文来告诉大家在 dotnet 6 的 HttpClientHandler 和 SocketsHttpHandler 两个类型有什么不同 在创建 HttpClient 时,可以在 HttpClient ...

  3. 2018-12-27-WPF-从-DrawingVisual-转-BitmapImage-图片

    title author date CreateTime categories WPF 从 DrawingVisual 转 BitmapImage 图片 lindexi 2018-12-27 11:3 ...

  4. SpringMVC拦截器配置后端登录校验

    引 创建拦截器的方法有多种,可以继承HandlerInterceptorAdapter类,也可实现HandlerInterceptor接口.接口中有三个方法: preHandle:在业务处理器处理请求 ...

  5. 一个可以输出当前移动设备机型(安卓,ios)系统版本的html页面

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. 简化 Python 日志管理:Loguru 入门指南

    简化 Python 日志管理:Loguru 入门指南 在开发和维护软件项目时,高效的日志管理系统对于监控应用程序的行为.调试代码和追踪异常至关重要.Python 的标准日志模块虽然功能强大,但其配置和 ...

  7. python执行SQL语句中有格式化时是否需要加引号

    import pymysqldb = pymysql.connect(host='localhost', user='root', password='123456', database='test' ...

  8. VForm

    VForm是一款基于Vue 2/Vue 3的低代码表单,支持Element UI.iView两种UI库,定位为前端开发人员提供快速搭建表单.实现表单交互和数据收集的功能. VForm全称为Varian ...

  9. C语言中四舍五入问题总结

    C语言中四舍五入问题的总结 在C语言中大部分情况下都是不需要四舍五入的. 除了一种情况:在使用输出函数 printf()限制浮点型输出的小数位个数 eg: printf("%0.2f&quo ...

  10. Unicode 15.0 标准已发布,新增鹅、豌豆等 20个emoji

    原文地址:The Unicode Blog: Announcing The Unicode Standard, Version 15.0 Unicode 标准版本 15.0 现已推出,包括核心规范.附 ...