精华内容
下载资源
问答
  • 本文这里所指并行信号和串行信号,包括了传输(通信)方式,又有接口类型,同时还有数据本身协议特点,信号、协议、总线和接口。
  • 并发,并行与串行的区别

    千次阅读 2019-12-20 18:03:54
    并发(concurrency)和并行(parallellism)是: 并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个...并发就是同步的串行,一个任务执行完执行下一个任务; 并行,在用同一个时刻执行多个线程; ...

    并发(concurrency)和并行(parallellism)是:

    并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔发生。
    并发的关键是你有处理多个任务的能力,不一定要同时。
    并行的关键是你有同时处理多个任务的能力。

    所以我认为它们最关键的点就是:是否是『同时』。

    并发就是同步的串行,一个任务执行完执行下一个任务;
    并行,在用同一个时刻执行多个线程; 

    举个生活中的例子 :

    你吃饭吃到一半,电话来了,你一直到吃完了以后才去接,这就说明你不支持并发也不支持并行。
    你吃饭吃到一半,电话来了,你停了下来接了电话,接完后继续吃饭,这说明你支持并发。
    你吃饭吃到一半,电话来了,你一边打电话一边吃饭,这说明你支持并行。

    并行(parallel):指在同一时刻,有多条指令在多个处理器上同时执行。所以无论从微观还是从宏观来看,二者都是一起执行的。

    并发(concurrency):指在同一时刻只能有一条指令执行,但多个进程指令被快速的轮换执行,使得在宏观上具有多个进程同时执行的效果,但在微观上并不是同时执行的,只是把时间分成若干段,使多个进程快速交替的执行。

    并行在多处理器系统中存在,而并发可以在单处理器和多处理器系统中都存在,并发能够在单处理器系统中存在是因为并发是并行的假象,并行要求程序能够同时执行多个操作,而并发只是要求程序假装同时执行多个操作(每个小时间片执行一个操作,多个操作快速切换执行)。

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

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

    展开全文
  • 你吃饭吃到一半,电话来了,你一直到吃完了以后才去接,这就说明你不支持并发也不支持并行。 你吃饭吃到一半,电话...并发就是同步的串行,一个任务执行完执行下一个任务; 并行,在用同一个时刻执行多个线程; ...
    案例一:
    你吃饭吃到一半,电话来了,你一直到吃完了以后才去接,这就说明你不支持并发也不支持并行。
    你吃饭吃到一半,电话来了,你停了下来接了电话,接完后继续吃饭,这说明你支持并发。
    你吃饭吃到一半,电话来了,你一边打电话一边吃饭,这说明你支持并行。
    
    案例二:
    想想在小学时经常发生的两件事。
    1.老师:“卷子批完了,班长来上来拿了发下去”。
    2.老师:"这是这次要做的新卷子,来第一排的我每人给你们一叠都往后传一下"
    案例三:
    串行:撒尿
    并行:腹泻
     。。。。。大家都懂撒,
    
    并发的关键是你有处理多个任务的能力,不一定要同时。
    并行的关键是你有同时处理多个任务的能力。
    
    所以我认为它们最关键的点就是:是否是『同时』。
    
    
    最本质的区别就是:并发是轮流处理多个任务,并行是同时处理多个任务
    
    展开全文
  • 代码 import java.util.concurrent.ForkJoinPool; import java.util.concurrent.RecursiveTask; //递归算 //ForkJoinPool 自动创建每... //打印本机当前可用处理器(cpu)(指核数) System.out.println(Runtime.

    代码

    import java.util.concurrent.ForkJoinPool;
    import java.util.concurrent.RecursiveTask;
    
    //递归算
    //ForkJoinPool  自动创建每个线程的任务队列
    public class TestForkJoinAdd {
    
    	public static void main(String[] args) {
    		//打印本机当前可用的处理器(cpu)的(指核数)
    		System.out.println(Runtime.getRuntime().availableProcessors());
    		
    		ForkJoinPool pool = new ForkJoinPool();
    		
    		AddTask main = new AddTask(1 , 100000);
    		Long result = pool.invoke(main);
    		System.out.println(result);
    		
    	}
    
    }
    
    class AddTask extends RecursiveTask<Long>{
    	int start;
    	int end;
    	static final int THRESHOLD = 1000;	//设置阈值 
    	public AddTask(int start, int end) {
    		super();
    		this.start = start;
    		this.end = end;
    	}
    	@Override
    	public Long compute() {
    		//如果start和end之间差距低于THRESHOLD 直接计算
    		if (end - start <= THRESHOLD){
    			long result = 0 ; 
    			for(int i = start ; i<= end ; i++){
    				result += i;
    			}
    			return result;
    		}
    		//否则 就要把任务分割为两个子任务
    		else{
    			int middle = (start+end)/2;
    			AddTask task1 = new AddTask(start , middle);
    			AddTask task2 = new AddTask(middle+1 , end);
    			//this.invokeAll(task1 , task2);	//表示让task1  task2(两个任务都执行)
    			invokeAll(task1 , task2);	//表示让task1  task2执行
    			long r1 = task1.join();		//拿到返回值
    			long r2 = task2.join();		//拿到返回值
    			return r1+r2;
    		}
    	}
    }
    

    结果
    在这里插入图片描述
    总结
    Fork-Join框架
    ForkJoinPool pool = new ForkJoinPool(); 线程池
    安卓底层基于java
    jdk1.7版本之后,jdk支持多核cpu。多核cpu性能发挥极致。
    多核cpu而生
    运行状态的线程只有一个,只有一个线程才能拿到cpu。

    ForkJoinPool 自动创建每个线程的任务队列,在队列空的时候,自动执行工作窃取算法
    线程池利用cpu的最高核数,线程池去调度。 是一个固定长度的线程池(根据计算器处理器的核数创建固定的线程数)
    RecursiveTask类中的compute具有返回值。

    多线程中的并发,并行与串行的区别
    添加链接描述

    这辈子坚持与不坚持都不可怕,怕的是独自走在坚持的道路上!!!

    展开全文
  • 并发与并行串行 明显区别 串行指只能进行一件事之后才能做另一件事,会发生阻塞情况,比如一个系统只能支持一个设备在线,这是有一个设备一直在线,另一个设备只能等那个设备下线之后才能上线,这时在线设备...

    并发与并行、串行
        明显区别
        串行指只能进行一件事之后才能做另一件事,会发生阻塞情况,比如一个系统只能支持一个设备在线,这是有一个设备一直在线,另一个设备只能等那个设备下线之后才能上线,这时在线的设备一直不下线,后面的设备就无法上线,效率不高。


        
        并发指在一个地点里可以做多件事情 强调可以发、交替进行、在单处理器跟多处理器都可以存在,在单处理器也可以存在的原因是它是并行的假象,看似可以处理很多事,其实是将时间分成若干份进行事件分发进行
            并发的实质是一个物理CPU(也可以多个物理CPU) 在若干道程序之间多路复用,并发性是对有限物理资源强制行使多用户共享以提高效率。并发可以帮助应用程序提高响应速度、减少等待时间并增加吞吐量。
            我们可以充分利用多核处理器的性能优势以及多任务并发的方法来提高程序运行效率和响应速度。但是其实现实更普遍的情况我们可以独立地执行某些操作,但最终还是需要将这些操作所得到的部分结果进行归并才能得到完整的结果。


            所以线程之间需要能够相互交换彼此的数据,并且有时候某些线程还需要等待其他线程的结果出来之后才能继续运行。于是我们就需要在线程之间进行协调,并由此引出同步和死锁等一系列令人头痛的问题。
            比如两个线程都用同一个内存位置进行读写,比如a线程本来在A时间点结束到b线程执行,但是此时a线程却延后结束,这就导致内存不够a线程跟b线程处理,此时a线程只能等b线程处理完,b线程又在等a线程处理完,从而导致死锁问题
          
          死锁问题
            当然并不是所有时候都会出现死锁问题
            死锁有四个必要条件
                互斥条件(Mutual exclusion):资源不能被共享,只能由一个进程使用。
                请求与保持条件(Hold and wait):已经得到资源的进程可以再次申请新的资源。
                非剥夺条件(No pre-emption):已经分配的资源不能从相应的进程中被强制地剥夺。
                循环等待条件(Circular wait):系统中若干进程组成环路,该环路中每个进程都在等待相邻进程正占用的资源。
            说明:T1、T2表示两个任务;R1和R2表示两个资源;由资源指向任务的箭头(如R1->T1,R2->T2)表示该资源被改任务所持有;由任务指向资源的箭头(如T1->S2,T2->S1)表示该任务正在请求对应目标资源;


                其满足上面死锁的四个必要条件:
            (1).互斥:资源S1和S2不能被共享,同一时间只能由一个任务使用;
            (2).请求与保持条件:T1持有S1的同时,请求S2;T2持有S2的同时请求S1;
            (3).非剥夺条件:T1无法从T2上剥夺S2,T2也无法从T1上剥夺S1;
            (4).循环等待条件:上图中的箭头构成环路,存在循环等待。    
            死锁处理方法:
            (1). 根据2中提供的sql,查看那个spid处于wait状态,然后用kill spid来干掉(即破坏死锁的第四个必要条件:循环等待);当然这只是一种临时解决方案,我们总不能在遇到死锁就在用户的生产环境上排查死锁、Kill sp,我们应该考虑如何去避免死锁。
            (2). 使用SET LOCK_TIMEOUT timeout_period(单位为毫秒)来设定锁请求超时。默认情况下,数据库没有超时期限(timeout_period值为-1,可以用SELECT @@LOCK_TIMEOUT来查看该值,即无限期等待)。
            当请求锁超过timeout_period时,将返回错误。timeout_period值为0时表示根本不等待,一遇到锁就返回消息。设置锁请求超时,破环了死锁的第二个必要条件(请求与保持条件)。        
            (3).选择一条SQL作死锁牺牲品:运行完上面的两个查询后,我们会发现有一条SQL能正常执行完毕,而另一个SQL会报错,即选择运行回滚开销最小的事务的会话作为死锁牺牲品达到最小代价。
        
            既然死锁出现之后的处理解决如此繁琐,那么如何避免死锁。上面中列出了死锁的四个必要条件,我们只要想办法破其中的任意一个或多个条件,就可以避免死锁发生,一般有以下几种方法
            (1).按同一顺序访问对象。(注:避免出现循环)
            (2).避免事务中的用户交互。(注:减少持有资源的时间,较少锁竞争)
            (3).保持事务简短并处于一个批处理中。(注:同(2),减少持有资源的时间)
            (4).使用较低的隔离级别。(注:使用较低的隔离级别(例如已提交读)比使用较高的隔离级别(例如可序列化)持有共享锁的时间更短,减少锁竞争)
            (5).使用基于行版本控制的隔离级别:2005中支持快照事务隔离和指定READ_COMMITTED隔离级别的事务使用行版本控制,可以将读与写操作之间发生的死锁几率降至最低:
            SET ALLOW_SNAPSHOT_ISOLATION ON --事务可以指定 SNAPSHOT 事务隔离级别;
            SET READ_COMMITTED_SNAPSHOT ON  --指定 READ_COMMITTED 隔离级别的事务将使用行版本控制而不是锁定。默认情况下(没有开启此选项,没有加with nolock提示),SELECT语句会对请求的资源加S锁(共享锁);
            而开启了此选项后,SELECT不会对请求的资源加S锁。
                
            
        并行指在一个时间点可以做多件事情 比如一栋教学楼有两个通道,学生可以从任意一个通道通过,两个通道不会因为哪个通道塞住了影响另一个
            在多道程序环境下,并行性使多个程序同一时刻可在不同CPU上同时执行。效率很高,但是成本太高。

    展开全文
  • 以下解释一下什么是并行与串行 并行代表同时进行,如把任务分给5个人来处理,这5个人同时会收到任务,并且可以同时处理,不受各自影响。 串行代表工作或任务由一个人完成后,再由另一个人去处理,直至全部完成,...
  • 1、并行串行类似串联电路和并联电路,并行就是多线程各执行哥互补干扰,串行就是前面没执行后面不会执行 2、并发在共享资源处串行,其它时候并行
  • 串行与并行的区别

    千次阅读 2019-08-15 11:30:19
    因此如果一个字符包含8个二进制位,则并行传输要求8个独立信道支持; (3)不支持长距离传输:由于信道之间电容感应,远距离传输时,可靠性较低。 (4)针脚:针脚多 (5)用途:多用作打印机、扫描仪等接口 .....
  • Nand Flash之并行与串行

    千次阅读 2019-04-14 16:16:11
    之前我们有讲到NAND Flash与NOR Flash封装、读取速率、写速率和电路设计等方面差异,现在我们将会讲到并行与串行Flash,主要是串行吧,并行需要讲很少。 因为串行与并行主要区别在于IO口数量上,因为有些...
  • 串行硬盘与并行硬盘的区别 分享到 编辑文章 随着技术的成熟,越来越多的主板和硬盘都开始支持SATA(串行ATA),SATA接口逐渐有取代传统的PATA(并行ATA)的趋势。那么SATA和PATA在传输模式上有何区别,SATA相对...
  • 串行接口与并行接口概念与区别

    万次阅读 2019-04-03 19:58:29
    关于串行与并行,相信搞cs很多人都不陌生。今天简答记录一下,总结自网络。 概念 串行接口 串行接口,简称串口,也就是COM接口,是采用串行通信协议扩展接口。串口出现是在1980年前后,数据传输率是115kbps~...
  • 并行通信:一条信息数据可以按照多位传送,有更多信号地线。 二、特点 串行通讯:两个设备之间通过一对信号线进行通讯,其中一根为信号线,另外一根为信号地线,信号电流通过信号线到达目标设备,再经过信号地...
  • 同步、异步 串行并行的区别

    千次阅读 2019-02-26 11:39:28
    同步、异步: ...串行并行: 指是任务执行方式。串行是指多个任务时,各个任务按顺序执行,完成一个之后才能进行下一个。并行是多个任务可以同时执行。异步是多个任务并行的前提条件。 ...
  • 串行并行的区别

    千次阅读 2017-02-09 09:13:40
    并行与串行 分类:默认栏目计算机系统信息交换有两种方式:并行数据传输方式和串行数据传输方式。并行数据传输是以计算机字长,通常是8位、16位、32位为传输单位,一次传送一个字长数据。它适合于外部设备与CPU...
  • 串行硬盘与并行硬盘 随着技术成熟,越来越多主板和硬盘都开始支持SATA(串行ATA),SATA接口逐渐有取代传统PATA(并行ATA)趋势。那么SATA和PATA在传输模式上有何区别,SATA相对PATA又有何优势呢?...
  • 串行通讯 一条信息各位数据被逐位按顺序传送通讯方式称为串行通讯。串行通讯特点是:数据位传送,传按位顺序进行,少只需一根传输线即可完成,成本低但送速度慢。串行通讯距离可以从几米到几千米。 根据...
  • 串行并行: 指是任务执行方式。串行是指多个任务时,各个任务按顺序执行,完成一个之后才能进行下一个。并行是多个任务可以同时执行。异步是多个任务并行的前提条件。   例子: 请求基础调用: ...
  • Stream 是 Java8 中处理集合关键抽象概念,它可以指定你希望对集合进行操作,可以执行非常复杂查找...也可以使用 Stream API 来并行执行操作。简而言之,Stream API 提供了一种高效且易于使用处理数据方式。
  • 串行通讯 一条信息各位数据被逐位按顺序传送通讯方式称为串行通讯。串行通讯特点是:数据位传送,传按位顺序进行,最少只...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 475
精华内容 190
关键字:

并行与串行的区别