串行,并行,并发

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

串行

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

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)。

 

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

 

 
本文转自左正博客园博客,原文链接: http://www.cnblogs.com/soundcode/p/7239266.html,如需转载请自行联系原作者
 
相关文章
|
4月前
并发与并行的区别(详细介绍)
并发与并行的区别(详细介绍)
649 0
|
6月前
并发和并行以及他们的区别
并发:         并发指的是多个任务交替执行的能力,这些任务可能不是同时执行,而是通过快速切换在不同任务之间来实现“同时执行”的效果。在多核处理器上,多个线程可以真正同时执行,而在单核处理器上,线程之间通过时间片轮转实现并发。         所以当谈论并发的时候一定要加个单位时间,也就是说单位时间内并发量是多少?离开了单位时间其实是没有意义的。 并行:         并行指的是多个任务同时执行的能力,每个任务都在独立的CPU上执行。并行通常用于同时处理独立任务,这些任务可以同时执行,而不需要相互等待或协同工作。 两者区别:         关键区别在于并发强调任务在时间上交替执行
40 0
|
1月前
|
调度 数据库 计算机视觉
并行和并发的区别(详细)
并行和并发的区别(详细)
|
3月前
|
机器学习/深度学习 分布式计算 负载均衡
并发与并行
并发与并行
30 0
|
8月前
|
并行计算 调度
多线程的并发和并行
多线程的并发和并行
67 0
|
6月前
并行,并发?
并行,并发?
15 0
|
7月前
|
SQL 开发框架 测试技术
常见的并发问题有哪些都不知道,还怎么说自己是大佬!!
常见的并发问题有哪些都不知道,还怎么说自己是大佬!!
80 0
|
9月前
|
存储 并行计算 安全
并发和并行的区别
并发和并行的区别
|
11月前
串行、并行和并发的区别
串行、并行和并发的区别
|
Java
并发和并行
并发和并行
91 0
并发和并行

热门文章

最新文章

相关实验场景

更多