串行,并行,并发

我们先来了解一下几个概念

串行

在串行的概念中会有两个概念

1.串行(serial)与并行(parallel)相对应,是指的我们从事某项工作时一个步骤一个步骤的去实施。

2.指串行通信。串行通信是指 使用一条数据线,将数据一位一位地依次传输,每一位数据占据一个固定的时间长度。

 当中通信中串行和并行的话,又存在多路复用情况多路复用是指以同一传输媒质(线路)承载多路信号进行通信的方式。各路信号在送往传输媒质以前,需按一定的规则进行调制,以利于各路已调信号在媒质中传输,并不致混淆,从而在传到对方时使信号具有足够能量,且可用反调制的方法加以区分、恢复成原信号。多路复用常用的方法有频分多路复用和时分多路复用,码分多路复用的应用也在不断扩大。

下图表示,线程串行情况,有n个任务或者你可以理解n个函数,由一个线程顺序执行,

优点:由于任务,函数都在一个线程执行所以不存在线程不安全情况,也就不存在临界区的问题。缺点:不能很好的利用cpu(当代多核心,多cpu硬件情况)的资源提高处理优势。

来看看一个断代码展示

 1     public static void main(String[] args) throws InterruptedException {
 2         //线程串行情况,顺序执行
 3         run1();
 4         run2();
 5         run3();
 6     }
 7
 8     //任务1
 9     public static void run1() {
10         System.out.println("run1()->" + System.currentTimeMillis());
11     }
12
13     //任务2
14     public static void run2() {
15         System.out.println("run2()->" + System.currentTimeMillis());
16     }
17
18     //任务3
19     public static void run3() {
20         System.out.println("run3()->" + System.currentTimeMillis());
21     }

由于只有主线程,没有其他线程情况下,这些任务/函数都是单线程执行的

并行

当系统有一个以上CPU时,则线程的操作有可能非并发。当一个CPU执行一个线程时,另一个CPU可以执行另一个线程,两个线程互不抢占CPU资源,可以同时进行,这种方式我们称之为并行(Parallel)。

下图表示的并行情况,又N个线程,去分别执行N个任务。

优点:由于任务,函数是在 N 个线程执行所以速度快,执行效率高CPU(当代多核心,多cpu硬件情况)的利用与也高。缺点:存在线程不安全情况,也就是存在临界区的问题会出现数据不准确,不安全,脏数据。

代码展示

 1     public static void main(String[] args) throws InterruptedException {
 2         //线程并行情况,有多个线程执行多个任务/函数
 3         new Thread(new Run1()).start();
 4         new Thread(new Run2()).start();
 5     }
 6
 7     //任务1
 8     static class Run1 implements Runnable {
 9
10         @Override
11         public void run() {
12             //执行任务1
13             run1();
14             //执行任务3
15             run3();
16         }
17     }
18     //任务2
19
20     static class Run2 implements Runnable {
21
22         @Override
23         public void run() {
24             //执行任务3
25             run3();
26             //执行任务1
27             run1();
28             //执行任务2
29             run2();
30         }
31     }
32
33     //任务1
34     public static void run1() {
35         System.out.println("run1()->" + System.currentTimeMillis());
36     }
37
38     //任务2
39     public static void run2() {
40         System.out.println("run2()->" + System.currentTimeMillis());
41     }
42
43     //任务3
44     public static void run3() {
45         System.out.println("run3()->" + System.currentTimeMillis());
46     }

并发

并发当有多个线程在操作时,如果系统只有一个CPU,则它根本不可能真正同时进行一个以上的线程,它只能把CPU运行时间划分成若干个时间段,再将时间 段分配给各个线程执行,在一个时间段的线程代码运行时,其它线程处于挂起状。.这种方式我们称之为并发(Concurrent)。

并发和并行是即相似又有区别的两个概念,并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔内发生。在多道程序环境下,并发性是指在一段时间内宏观上有多个程序在同时运行,但在单处理机系统中,每一时刻却仅能有一道程序执行,故微观上这些程序只能是分时地交替执行。倘若在计算机系统中有多个处理机,则这些可以并发执行的程序便可被分配到多个处理机上,实现并行执行,即利用每个处理机来处理一个可并发执行的程序,这样,多个程序便可以同时执行。
时间: 2024-10-08 22:57:02

串行,并行,并发的相关文章

iOS多线程——同步异步串行并行

串行并行异步同步的概念很容易让人混淆,关于这几个概念我在第一篇GCD中有解释,但是还不够清晰,所以这里重写一篇博客专门对这几个概念进行区分: 先说一下队列和任务: (1)队列分为串行和并行,任务的执行分为同步和异步,异步是多线程的代名词,异步在实际引用中会开启新的线程,执行耗时操作. (2)队列只是负责任务的调度,而不负责任务的执行,任务是在线程中执行. 以上两点对了解串行.并行.同步.异步非常重要! 再说一下队列和任务的特点: (1)串行队列:任务按照顺序被调度,前一个任务不执行完毕,队列不会

同步,异步,串行队列,并发队列,全局队列,主队列等概念的总结

同步,异步,串行队列,并发队列,全局队列,主队列等概念的总结 在GCD函数中, 我们常常碰到同步,异步,串行队列,并发队列,全局队列,主队列等概念,而这些概念又常常组合在一起, 十分头疼, 这篇文章就来梳理一下这些烦人的概念. 不想看长篇大论的, 直接看文章末尾的表格即可! 在此之前, GCD中还涉及到两个十分重要的概念, 就是任务和队列 任务(Task): 你需要执行的操作 队列(Queue): 存放任务的容器 GCD中两个重要的函数, 一个同步执行, 一个异步执行 dispatch_asyn

【iOS开发-91】GCD的同步异步串行并行、NSOperation和NSOperationQueue一级用dispatch_once实现单例(转载)

(1)GCD实现的同步异步.串行并行. ——同步sync应用场景:用户登录,利用阻塞 ——串行异步应用场景:下载等耗时间的任务 /** * 因为是异步,所以开通了子线程,但是因为是串行队列,所以只需要开通1个子线程(2),它们在子线程中顺序执行.最常用. */ -(void)gcdDemo1{ dispatch_queue_t q1=dispatch_queue_create("com.hellocation.gcdDemo", DISPATCH_QUEUE_SERIAL); for

GCD的同步异步串行并行、NSOperation和NSOperationQueue一级用dispatch_once实现单例

转:http://www.tuicool.com/articles/NVVnMn (1)GCD实现的同步异步.串行并行. ——同步sync应用场景:用户登录,利用阻塞 ——串行异步应用场景:下载等耗时间的任务 /** * 因为是异步,所以开通了子线程,但是因为是串行队列,所以只需要开通1个子线程(2),它们在子线程中顺序执行.最常用. */ -(void)gcdDemo1{ dispatch_queue_t q1=dispatch_queue_create("com.hellocation.gc

IOS多线程知识总结/队列概念/GCD/串行/并行/同步/异步

进程:正在进行中的程序被称为进程,负责程序运行的内存分配;每一个进程都有自己独立的虚拟内存空间: 线程:线程是进程中一个独立的执行路径(控制单元);一个进程中至少包含一条线程,即主线程. 队列:dispatch_queue_t,一种先进先出的数据结构,线程的创建和回收不需要程序员操作,由队列负责. 串行队列:队列中的任务只会顺序执行(类似跑步) dispatch_queue_t q = dispatch_queue_create(“....”, dispatch_queue_serial); 并

iOS中的串行,并行,分组,一次,障碍,延迟,反复执行(GCD)

#import "OneViewController.h" @interface OneViewController () @end @implementation OneViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. } - (void)didReceiveMemoryWarning { [super didRece

IOS GCD(线程的 串行、并发 基本使用)

// 凡是函数名种带有create\copy\new\retain等字眼, 都需要在不需要使用这个数据的时候进行release // GCD的数据类型在ARC环境下不需要再做release // CF(Core Foundation)的数据类型在ARC环境下还是需要再做release @implementation HMViewController - (void)viewDidLoad { [super viewDidLoad]; [self performSelectorInBackgrou

FS BPM 业余研发(用户详细操作手册--单人串行/并行)之 深圳分公司技术部请假审批流程

1.FS BPM 简介 BPM软件中BPM是英文字母缩写,大致有二个意思.第一.Business Process Management,即业务流程管理,是一套达成企业各种业 务环节整合的全面管理模式.第二.Business Process Modeling,即业务流程建模,是对业务流程进行表述的方式,它是过程分析与重组的 重要基础. 如果再不了解请自行百度了,本人在这里就不再详细介绍了. 2.FS BPM 系统开发介绍 FS BPM于2017年1月开始进行开发.其中经历多个难题.用高性能机制解决

并行的执行效率一定高于串行吗?(多线程的执行效率一定高于单线程吗?)

一.什么是串行?什么是并行? 串行:任务进行排队,一个一个执行: 并行:多个任务齐头并进.   二.单核.多核这两种情况下的并行. 单核情况下的并行:并非真的是多个任务同时进行的,是需要在这任务之间来回切换(即上下文切换)的. 多核情况下的并行:是几核,就能真正做到几核同时执行各自的任务. 三.任务的两大类型. “计算密集型”任务: 特点是要进行大量的计算,消耗CPU资源,比如计算圆周率.对视频进行高清解码等等,全靠CPU的运算能力. 这种计算密集型任务虽然也可以用多任务完成,但是任务越多,花在

同步 ,异步,并发/并行,串行

同步:多个任务情况下,一个任务A执行结束,才可以执行另一个任务B.只存在一个线程. 异步:多个任务情况下,一个任务A正在执行,同时可以执行另一个任务B.任务B不用等待任务A结束才执行.存在多条线程. 接下来分析一下并行/并发,串行.很多人大概会混淆这些概念. 并发和并行其实是异步队列实现的两种形式.并行其实是真正的异步,多核CUP可以同时开启多条线程供多个任务同时执行,互补干扰,如上图的并行,其实和异步图例一样.但是并发就不一样了,是一个伪异步.在单核CUP中只能有一条线程,但是又想执行多个任务