多线程之并发与并行概念总结
来源:互联网 发布:软件著作权申请网址 编辑:程序博客网 时间:2024/06/06 14:07
转载:点击打开链接
多线程:
- 在了解线程之前,要先知道进程这个概念。进程是一个具有独立功能的程序关于某个数据集合的一次运行活动。简单点说,进程就是执行中的程序活动,是一个活动的实体。
- 多进程,就好比同时打开了Word,Excel和Visio,他们都是不同的程序运行活动,即多个进程同时启动而已,这个概念比较好理解。
- 线程,是一个执行中的程序活动(即进程)的多个执行路径,执行调度的单位。线程依托于进程存在,在进程之下,可以共享进程的内存,而且还拥有一个属于自己的内存空间,这段内存空间也叫做线程栈,是在建立线程时由系统分配的,主要用来保存线程内部所使用的数据。
- 多线程,指在一个进程下有多个线程。各个线程执行自己的任务,这些线程可以”同时进行“(这里加了双引号,下面会讲述到加双引号的原因)。
- 那多线程有什么好处?多线程应用在生活中随处可见,Word文档就是一个很好的例子。Word有“后台打印”的功能,用户点击打印按钮后,如果发现可以对当前文本进行修改,可以在打印过程中回到主界面进行修改、保存等操作。 如果没有应用多线程,不妨假设用户要打印的文本很长很长,那么用户要等打印操作执行完后,才可以对文本进行修改编辑保存等,这样用户体验就不如多线程的好。还有迅雷,有没有发现迅雷是可以同时下载东西的?例如同时下载A,B,A下载进度到53.4%,B下载进度到47.1%,有时A速度快些,有时B速度快些,反正能确定的是A,B都在下载内容,而不是一定要等A下载完后,B才可以开始下载,这也是多线程的作用。因此,多线程强调”同时,一起进行“,而不是单一的顺下操作。
并发:
讲并发之前,要先看一张图:
- Concurrency,是并发的意思。并发的实质是一个物理CPU(也可以多个物理CPU) 在若干道程序(或线程)之间多路复用,并发性是对有限物理资源强制行使多用户共享以提高效率。
- 微观角度:所有的并发处理都有排队等候,唤醒,执行等这样的步骤,在微观上他们都是序列被处理的,如果是同一时刻到达的请求(或线程)也会根据优先级的不同,而先后进入队列排队等候执行。
- 宏观角度:多个几乎同时到达的请求(或线程)在宏观上看就像是同时在被处理。
- 通俗点讲,并发就是只有一个CPU资源,程序(或线程)之间要竞争得到执行机会。图中的第一个阶段,在A执行的过程中B,C不会执行,因为这段时间内这个CPU资源被A竞争到了,同理,第二个阶段只有B在执行,第三个阶段只有C在执行。其实,并发过程中,A,B,C并不是同时在进行的(微观角度)。但又是同时进行的(宏观角度)。
并行:
同样,在讲并行之前,要先看一张图:
- Parallelism,即并行,指两个或两个以上事件(或线程)在同一时刻发生,是真正意义上的不同事件或线程在同一时刻,在不同CPU资源呢上(多核),同时执行。
- 并行,不存在像并发那样竞争,等待的概念。
- 图中,A,B,C都在同时运行(微观,宏观)。
通过多线程实现并发,并行:
- java中的Thread类定义了多线程,通过多线程可以实现并发或并行。
- 在CPU比较繁忙,资源不足的时候(开启了很多进程),操作系统只为一个含有多线程的进程分配仅有的CPU资源,这些线程就会为自己尽量多抢时间片,这就是通过多线程实现并发,线程之间会竞争CPU资源争取执行机会。
- 在CPU资源比较充足的时候,一个进程内的多线程,可以被分配到不同的CPU资源,这就是通过多线程实现并行。
- 至于多线程实现的是并发还是并行?上面所说,所写多线程可能被分配到一个CPU内核中执行,也可能被分配到不同CPU执行,分配过程是操作系统所为,不可人为控制。所有,如果有人问我我所写的多线程是并发还是并行的?我会说,都有可能。
- 不管并发还是并行,都提高了程序对CPU资源的利用率,最大限度地利用CPU资源。
阅读全文
0 0
- 多线程之并发与并行概念总结
- 多线程 ---并发与并行概念总结
- 多线程 ---并发与并行概念总结
- 多线程 ---并发与并行概念总结
- 并发、并行、同步、多线程、异步的概念
- OS之并发与并行,异步和多线程的区别
- Python 多线程教程:并发与并行
- Python 多线程教程:并发与并行
- 并发和并行,异步与多线程区别
- Java多线程与并发(一)之概念及操作方法
- java多线程之并行和并发
- java多线程之并行和并发
- 多线程相关的一些基础概念:同步、异步、并发、并行
- 并行 并发 概念
- 并行并发多线程
- java多线程与并发总结
- 多线程与并发知识点总结
- java并发与多线程总结
- 上传plupload的使用
- openvr显示相关接口
- 机器学习的算法——用最通俗的例子去理解
- 通过函数名的字符串来调用这个函数
- javascript之异常捕获
- 多线程之并发与并行概念总结
- 读
- [C]求出满足下列条件的四位数:该数是个完全平方数,且第一、三位数字之和为10,第二、四位数字之积为12
- css
- 【MD5】MD5校验文件的正确性
- spring.profiles.active 针对多种启动环境的spring配置
- hdu1505(最大子矩阵)
- TensorFlow学习笔记02:TensorFlow基本简介
- python 进程的理解