精华内容
下载资源
问答
  • 多线程并发和并行的区别

    千次阅读 2020-09-13 14:35:34
    背景  对于java开发从业人员来说,并发编程是绕不开的话题,juc并发包下提供了一系列多线程场景解决方案。  随着jdk1.8的普及,多线程处理... 多线程并发和并行的区别   2. parallelStream()并行滥用的后果   3

    背景

     对于java开发从业人员来说,并发编程是绕不开的话题,juc并发包下提供了一系列多线程场景解决方案。
     随着jdk1.8的普及,多线程处理问题,除了使用使用线程池(ExecutorService),很多人选择了parallelStream() 并行流,底层使用forkjoin实现并行处理。
     那么并行和并发又有什么区别?究竟改如何选择?滥用时又会有什么影响?
      这些问题我分以下几篇文章进行详细说明:
      1. 多线程并发和并行的区别 (本文)
      2. parallelStream()并行滥用的后果
      3. forkjoin和forkjoinpool讲解
      4. 线程池正确用法

    并发和并行共同点

    • 都利用多线程技术
    • 目的都是提高CPU的使用率

    并发和并行区别

    侧重点不同

    • 并发(concurrency):强调一个处理器同时处理多个任务,并不是正在同时运行。
    • 并行(parallelism):强调多个处理器或者是多核的处理器同时处理多个不同的任务,同时运行多段代码
      在这里插入图片描述

    使用场景不同

    • io密集场景
      场景应用程序开发,提供http接口、数据库查询、微服务调用都是io请求,io等等时几乎不消耗cpu,这是为了提供cup使用率,建议使用多线程并发,线程数可以远大于cpu核数。
    • cup密集场景
      对应大量的加减乘除运算、md5、hash等运算操作,需要持续使用cpu,需要让多核cpu并行运算,适合使用forkjoin并行计算。
      技术场景多线程不足,使用多线程技术,也能提高性能,但是线程设置过大会浪费cpu线程切换的时间,如果线程任务分配不均匀,会导致有的cpu忙碌有的cpu空闲

    技术栈不同

    • 并发编程
      jdk1就支持多线程Thread
      jdk5加入Thread pool和juc
      这些都是对多线程的支持,多线程代码可以单核cpu和多核cpu机器上,使用多线程可以在io并发高时,有效利用cpu资源。
    • 并行编程
      jdk7加入fork-join库
      jdk8加人parallelstream
      这些是对并行计算的支持,目的是同时使用多核cpu进行高效计算
    展开全文
  • 多线程并发编程】一进程线程(并发和并行)

    千次阅读 多人点赞 2020-02-15 19:45:35
    了解并发和并行,进程线程的一些概念,更好的学习多线程编程

    程序猿学社的GitHub,欢迎Star:
    https://github.com/ITfqyd/cxyxs
    觉得有用,可以点赞,关注,评论,留言四连发。

    前言

    为了更好的学习多线程,在这里我们了解一下,一些概念性的描述,只有理解这些概念后,才能更好的学习多线程。加油!!!

    1.并发和并行

    并发

    并发指在同一时刻只能有一条指令执行。也就是单个cpu。一般是只多个线程进行交互,达到理论上的同时执行效果,实际上是交替执行,。但是因为,但是因为cpu处理速度过快,我们几乎很难察觉。
    例如:一般写着博客,到了吃饭的点,再去吃饭,一直重复,中间有间隙,同一时刻,只能做一件事。举例子的时候,我们只说把间隙放大了而已。

    并行

    并发指同一时刻,同时运行多个任务。可以我们已经鸟枪换大炮了,通过多个cpu,还并行处理多个任务。
    例如:我要开发一个博客管理系统,一个人开发要一个月。boss觉得太慢了,想了想,这效率太慢了,正好,我有钱,一口气,招了3个人。这个项目。10多天就完成勒。通过多个人同时开发,一个做用户,一个做论坛,一个做文章管理,同时进行。大大提高了开发效率。

    2. 什么是进程和线程

    进程

    进程是cpu资源分配的最小单位,进程之间不能共享资源。进程有自己独立的地址空间。一个进程可能包含多个线程。

    为了方便理解,我们通过一些案例更好的理解一下。
    进程就是我们上网过程中,启动某个应用,他就是进程。
    例如:我们开发的项目,发布到服务器下,就会启动一个预知对应的进程。
    下图是社长启动的所有进程。可以通过ctrl+alt+delet组合键查看。
    在这里插入图片描述

    线程

    线程是cpu调度的最小单位,线程还有自己的栈和栈指针,程序计数器等寄存器。线程必须依赖于进程。可以理解为进程是父亲。线程是儿子,一个父亲可能有多个儿子,每个儿子,肯定有一个父亲,当然,如果是孙悟空,就另说。

    点击某个网站,实际上就会调用一个线程。假设用的是tomcat作为服务端,我们访问网站,向后台发送一个请求,会调用一个http-bio-端口号的线程。
    启动一个微信,我们发现我们能看到的有4个线程。这里的微信也就是我们所说的进程。也就是说启动一个微信应用进程。会启动4个线程。
    在这里插入图片描述

    后记

    程序猿学社的GitHub,欢迎Star:
    https://github.com/ITfqyd/cxyxs
    觉得有用,可以点赞,关注,评论,留言四连发。

    展开全文
  • 多线程(二)并发和并行

    千次阅读 2020-11-18 20:00:11
    并发多线程同时操作同一个资源) 单核CPU ,模拟出多条线程,快速交替 并行(多个人一起行走,多个人处理多件事情) 多核CPU,多个线程可以同时执行,同时干不同的事情 简而言之,就是并发是多个线程交替执行,...

    并发(多线程同时操作同一个资源)

    • 单核CPU ,模拟出多条线程,快速交替

    并行(多个人一起行走,多个人处理多件事情)

    • 多核CPU,多个线程可以同时执行,同时干不同的事情

    简而言之,就是并发是多个线程交替执行,反正一个CPU就只能同时处理一个线程,而并行就是指多个CPU,它可以同时处理多件事情

    获取本机电脑CPU的核数

    public class Test {
        public static void main(String[] args) {
            //获取cpu的核数
            System.out.println(Runtime.getRuntime().availableProcessors());
        }
    }

    一般电脑或者服务器有多少个CPU就开多少条线程,并发编程的本质就是充分利用CPU的资源

    展开全文
  • 并发 并行 同步 异步 多线程

    并发(Concurrent)

    在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行。

    并发,本质上是一个物理CPU(也可以是多个)在若干个程序(或进程)之间多路复用,并发性是对有限物理资源强制为多用户共享,以提高效率;

    并行(Parallel)

    指两个或多个事件(线程)在同一时刻发生,在不同的CPU资源上,同时执行

    在操作系统中,一组程序按独立异步的速度执行,无论从微观还是宏观,程序都是一起执行的。

    所以,并行不存在竞争、等待等概念;

    并发和并行

    并行需要两个或两个以上的线程跑在不同的处理器上,并发可以跑在一个处理器上通过时间片进行切换。

    在单CPU系统中,系统调度在某一时刻只能让一个线程运行,虽然这种调试机制有多种形式(大多数是时间片轮巡为主),但无论如何,要通过不断切换需要运行的线程让其运行的方式就叫并发(concurrent)。而在多CPU系统中,可以让两个以上的线程同时运行,这种可以同时让两个以上线程同时运行的方式叫做并行(parallel)。

    不论是并发还是并行,都能提高程序对CPU资源的利用率;

    一个形象的描述,咖啡机模型:
    并行&并发

    二、异步与多线程
    1)基本概念
    1. 并发:在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行。其中两种并发关系分别是同步和互斥
    2. 互斥:进程间相互排斥的使用临界资源的现象,就叫互斥。
    3. 同步:进程之间的关系不是相互排斥临界资源的关系,而是相互依赖的关系。进一步的说明:就是前一个进程的输出作为后一个进程的输入,当第一个进程没有输出时第二个进程必须等待。具有同步关系的一组并发进程相互发送的信息称为消息或事件。
    其中并发又有伪并发和真并发,伪并发是指单核处理器的并发,真并发是指多核处理器的并发。
    4. 并行:在单处理器中多道程序设计系统中,进程被交替执行,表现出一种并发的外部特种;在多处理器系统中,进程不仅可以交替执行,而且可以重叠执行。在多处理器上的程序才可实现并行处理。从而可知,并行是针对多处理器而言的。并行是同时发生的多个并发事件,具有并发的含义,但并发不一定并行,也亦是说并发事件之间不一定要同一时刻发生。
    5. 多线程:多线程是程序设计的逻辑层概念,它是进程中并发运行的一段代码。多线程可以实现线程间的切换执行。
    6. 异步:异步和同步是相对的,同步就是顺序执行,执行完一个再执行下一个,需要等待、协调运行。异步就是彼此独立,在等待某事件的过程中继续做自己的事,不需要等待这一事件完成后再工作。线程就是实现异步的一个方式。异步是让调用方法的主线程不需要同步等待另一线程的完成,从而可以让主线程干其它的事情。

    异步和多线程并不是一个同等关系,异步是最终目的,多线程只是我们实现异步的一种手段。异步是当一个调用请求发送给被调用者,而调用者不用等待其结果的返回而可以做其它的事情。实现异步可以采用多线程技术或则交给另外的进程来处理。

    异步和同步的区别, 在IO等待的时候,同步不会切走,浪费了时间。

    多线程的好处,比较容易的实现了 异步切换的思想, 因为异步的程序很难写的。多线程本身程还是以同步完成,但是应该说比效率是比不上异步的。
    而且多线很容易写, 相对效率也高。

    2)深层次理解

    多线程和异步操作的异同

    多线程和异步操作两者都可以达到避免调用线程阻塞的目的,从而提高软件的可响应性。甚至有些时候我们就认为多线程和异步操作是等同的概念。但是,多线程和异步操作还是有一些区别的。而这些区别造成了使用多线程和异步操作的时机的区别。

    异步操作的本质

    所有的程序最终都会由计算机硬件来执行,所以为了更好的理解异步操作的本质,我们有必要了解一下它的硬件基础。 熟悉电脑硬件的朋友肯定对DMA这个词不陌生,硬盘、光驱的技术规格中都有明确DMA的模式指标,其实网卡、声卡、显卡也是有DMA功能的。DMA就是直接内存访问的意思,也就是说,拥有DMA功能的硬件在和内存进行数据交换的时候可以不消耗CPU资源。只要CPU在发起数据传输时发送一个指令,硬件就开始自己和内存交换数据,在传输完成之后硬件会触发一个中断来通知操作完成。这些无须消耗CPU时间的I/O操作正是异步操作的硬件基础。所以即使在DOS这样的单进程(而且无线程概念)系统中也同样可以发起异步的DMA操作。

    线程的本质

    线程不是一个计算机硬件的功能,而是操作系统提供的一种逻辑功能,线程本质上是进程中一段并发运行的代码,所以线程需要操作系统投入CPU资源来运行和调度。

    异步操作的优缺点

    因为异步操作无须额外的线程负担,并且使用回调的方式进行处理,在设计良好的情况下,处理函数可以不必使用共享变量(即使无法完全不用,最起码可以减少共享变量的数量),减少了死锁的可能。当然异步操作也并非完美无暇。编写异步操作的复杂程度较高,程序主要使用回调方式进行处理,与普通人的思维方式有些初入,而且难以调试。

    多线程的优缺点
      多线程的优点很明显,线程中的处理程序依然是顺序执行,符合普通人的思维习惯,所以编程简单。但是多线程的缺点也同样明显,线程的使用(滥用)会给系统带来上下文切换的额外负担。并且线程间的共享变量可能造成死锁的出现。

    适用范围

    在了解了线程与异步操作各自的优缺点之后,我们可以来探讨一下线程和异步的合理用途。我认为:当需要执行I/O操作时,使用异步操作比使用线程+同步I/O操作更合适。I/O操作不仅包括了直接的文件、网络的读写,还包括数据库操作、Web Service、HttpRequest以及.Net Remoting等跨进程的调用。
      而线程的适用范围则是那种需要长时间CPU运算的场合,例如耗时较长的图形处理和算法执行。但是往往由于使用线程编程的简单和符合习惯,所以很多朋友往往会使用线程来执行耗时较长的I/O操作。这样在只有少数几个并发操作的时候还无伤大雅,如果需要处理大量的并发操作时就不合适了。

    展开全文
  • 文章目录进程、线程、多线程并发并行#1 进程#2 线程#3 多进程#4 多线程#5 并发#6 并行#7 通过多线程实现并发并行 进程、线程、多线程并发并行 首先,并行并发都是程序多线程处理场景,因此,一旦提到...
  • 1、并发和并行的区别 可由上图形象指出两者的区别: 1)定义: 并发:在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点...
  • 1、CPU时间分片、多线程? 如果线程数不多于CPU核心数,会把各个线程都分配一个核心,不需分片,而当线程数多于CPU核心数时才会分片。 2、并发和并行的区别 并发:当有多个线程在操作时,如果系统只有一个CPU,把...
  • Java多线程--并发和并行的区别

    万次阅读 2016-04-10 22:45:56
    所有的并发处理都有排队等候,唤醒,执行至少三个这样的步骤.所以并发肯定是宏观概念,在微观上他们都是序列... 并发并行是两个既相似而又不相同的概念:并发性,又称共行性,是指能处理个同时性活动的能力;并行
  • 每天进步一点点! 并发和并行的区别是什么? 并发个任务在同一个CPU核上,按细分的时间片轮流执行,从逻辑上看任务是同时执行的; 并行个处理器或多核处理器同时处理个任务。 ...
  • 没有线程编程的程序好比一个人一只手干活,而多线程的程序就比一个人多之手干活. 进程是系统资源分配的独立单位,而线程是可调度运行的独立单位,一个进程可以拥有多个线程,线程是进程并行完成的多个任务. 并发和并行的...
  • 没有线程编程的程序好比一个人一只手干活,而多线程的程序就比一个人多之手干活. 进程是系统资源分配的独立单位,而线程是可调度运行的独立单位,一个进程可以拥有多个线程,线程是进程并行完成的多个任务. 并发和...
  • 版权声明:本文为博主原创文章,未经...1.并发和并行是即相似又有区别(微观概念) 并行:指两个或个事件在同一时刻点发生; 并发:指两个或个事件在同一时间段内发生。 ----------------------------------------...
  • 多线程并行和并发的区别是什么? 目录 多线程并行和并发的区别是什么? 多线程相关概念 进程 线程 此时再来看多线程并行和并发的区别: 并行 并发 多线程相关概念 官方定义是: 多线程是指从软件或者硬件上...
  • 单线程多线程并行和并发

    千次阅读 2016-02-19 13:29:29
    单线程多线程并行和并发本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和图片上传 LaTex数学公式 UML序列图和流程图 离线写...
  • 进程与线程 并发并行

    千次阅读 2017-01-05 17:43:38
    进程与线程 并发并行进程与线程 首先要理解的是,我们的软件都是运行在操作系统之上,操作系统再控制硬件,比如 处理器、内存、IO设备等。操作系统为了向上层应用程序提供 简单一致 的机制来控制复杂而又大相径庭...
  • 并发并行、高并发和多线程

    千次阅读 2018-06-25 10:51:38
    1.并发和并行的区别并发:当有线程在操作时,如果系统只有一个CPU,把CPU运行时间划分成若干个时间段,分配给各个线程执行,在一个时间段的线程代码运行时,其它线程处于挂起状态。这种方式我们称之为并发...
  • 并发:拥有处理个任务的能力,不一定要同时,不同代码块交替执行的性能,可以串行处理也可以并行处理并行:同时处理个任务的能力,不同代码块同时执行的性能串行:指个任务时,各个任务按顺序执行,完成一个...
  • 并发和并行并发和并行概述并发和并行的区别什么是并发缺点:优点:多线程并发优点:缺点:为什么使用并发任务拆分提高性能多线程库简介 并发和并行 概述 并发(Concurrency) :是同时处理很多事情(dealing with ...
  • 软件开发,网站开发过程中经常有并发并行这样的多线程处理与应用。因此,有必要对其进行了解与掌握。 多线程: 在了解线程之前,要先知道进程这个概念。进程是一个具有独立功能的程序关于某个数据集合的一次运行...
  • 并发和并行,异步与多线程区别

    万次阅读 多人点赞 2018-05-12 08:48:03
    1、并发和并行的区别可由上图形象指出两者的区别:1)定义:并发:在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序...
  • 多线程并行和并发

    2019-03-20 20:02:08
    并行:同一时刻可以处理事情的能力。 并发:一段时间内可以处理事情的能力。 例如:食堂有八个窗口可以同时打饭,那么食堂的并行能力就是8; 食堂有八个窗口可以同时打饭,每个敞口一分钟内可以打十份饭,那么...
  • 软件开发,网站开发过程中经常有并发并行这样的多线程处理与应用。因此,有必要对其进行了解与掌握。 多线程: 在了解线程之前,要先知道进程这个概念。进程是一个具有独立功能的程序关于某个数据集合的一...
  • 1.1并发并行 并发:指两个或个事件在同一个时间段内发生。可以理解为在单CPU系统中,每一时刻只能允许一道程序执行,要执行两个及两个以上,则是分时交替运行(因为分时交替运行时间非常短,CPU在线程之间做...
  • /* * 进程: * 正在运行的程序,是系统进行资源分配调用的独立单位。 * 每一个进程都有它自已的内存空间系统资源。... * 一个进程如果有多条执行路径,则称为多线程程序。 * * 举例: * 扫
  • 多线程 ---并发并行概念总结

    万次阅读 多人点赞 2016-06-30 15:17:39
    软件开发,网站开发过程中经常有并发并行这样的多线程处理与应用。因此,有必要对其进行了解与掌握。多线程: 在了解线程之前,要先知道进程这个概念。进程是一个具有独立功能的程序关于某个数据集合的一次运行...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 164,123
精华内容 65,649
关键字:

多线程的并发和并行