精华内容
下载资源
问答
  • 主要介绍了C++ 线程(串行 并行 同步 异步)详解的相关资料,需要的朋友可以参考下
  • &...区别同步和异步</strong>   一个进程启动的多个不相干线程,它们相互之间关系为异步。   举个简单的例子 就是游戏,游戏会有图像背景音乐 图像是由玩家操作...
    <strong>出处:http://blog.csdn.net/wxqian25/article/details/9417613</strong>
    <strong>区别同步和异步</strong>
     
    一个进程启动的多个不相干线程,它们相互之间关系为异步。
     
    举个简单的例子 就是游戏,游戏会有图像和背景音乐 
    图像是由玩家操作的 而背景音乐一般都是循环播放玩家不能操作 
    这里的图像和声音就分别是不同的线程   图像一般是主线程 背景音乐是守护线程(守护线程就是主线程结束的时候守护线程也结束)  像这样的组合就是异步线程 两个线程之间没什么关系各干各的 
    .至于同步的话指的是多线程同时操作一个数据 这个时候需要对数据添加保护 这个保护就是线程的同步
     
    <strong>同步机制</strong>
     
    临界区、互斥区、事件、信号量四种方式 临界区(Critical Section)、互斥量(Mutex)、信号量(Semaphore)、事件(Event)的区别 1、临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。在任意时刻只允许一个线程对共享资源进行访问,如果有多个线程试图访问公共资源,那么在有一个线程进入后,其他试图访问公共资源的线程将被挂起,并一直等到进入临界区的线程离开,临界区在被释放后,其他线程才可以抢占。 2、互斥量:采用互斥对象机制。 只有拥有互斥对象的线程才有访问公共资源的权限,因为互斥对象只有一个,所以能保证公共资源不会同时被多个线程访问。互斥不仅能实现同一应用程序的公共资源安全共享,还能实现不同应用程序的公共资源安全共享 3、信号量:它允许多个线程在同一时刻访问同一资源,但是需要限制在同一时刻访问此资源的最大线程数目 4、事 件: 通过通知操作的方式来保持线程的同步,还可以方便实现对多个线程的优先级比较的操作
     
    展开全文
  • 线程同步和异步区别

    千次阅读 2019-03-21 09:06:04
    而这些区别造成了使用多线程和异步操作的时机的区别。  异步操作的本质  所有的程序最终都会由计算机硬件来执行,所以为了更好的理解异步操作的本质,我们有必要了解一下它的硬件基础。 熟悉电脑硬件的...

    多线程和异步操作的异同

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

      异步操作的本质

      所有的程序最终都会由计算机硬件来执行,所以为了更好的理解异步操作的本质,我们有必要了解一下它的硬件基础。 熟悉电脑硬件的朋友肯定对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操作。这样在只有少数几个并发操作的时候还无伤大雅,如果需要处理大量的并发操作时就不合适了。

     

    线程同步与异步区别

    线程同步是多个线程同时访问同一资源,等待资源访问结束,浪费时间,效率低    线程异步:访问资源时在空闲等待时同时访问其他资源,实现多线程机制

    异步处理就是,你现在问我问题,我可以不回答你,等我用时间了再处理你这个问题.同步不就反之了,同步信息被立即处理 -- 直到信息处理完成才返回消息句柄;异步信息收到后将在后台处理一段时间 -- 而早在信息处理结束前就返回消息句柄

    展开全文
  • I/O同步/异步和线程并发的同步/异步是有区别的,I/O同步相当于告诉应用程序已经到了就绪状态(数据从内核读到用户的缓冲区或者用户的缓冲区读到内核中去),I/O异步相当于告诉应用程序已经到了完成状态(用户内核...

    一开始我以为都叫同步、异步是一个意思,有时候还蒙蒙的,直到今天看了linux高性能服务器这本书才恍然大悟他们的区别
    I/O同步/异步和线程并发的同步/异步是有区别的,I/O同步相当于内核告诉应用程序已经到了就绪状态(数据从内核读到用户的缓冲区或者用户的缓冲区读到内核中去),I/O异步相当于内核告诉应用程序已经到了完成状态(用户和内核交换全由内核来接手).而线程的同步和异步,举个简单的例子,同步是你要等着面包烤熟了再去切菜,线程异步是你可以把面包放着烤箱里考着,然后就去切菜,烤好了再拿出来,两不耽误。

    展开全文
  • Java --- 线程同步和异步区别

    万次阅读 多人点赞 2016-12-23 15:23:37
    1. Java 线程 同步异步线程并发时,多个线程同时请求同一个资源,必然导致此资源的数据不安全,A线程修改了B线程的处理的数据,而B线程又修改了A线程处理的数理。显然这是由于全局资源造成的,有时为了解决此...

    1. Java 线程 同步与异步

    多线程并发时,多个线程同时请求同一个资源,必然导致此资源的数据不安全,A线程修改了B线程的处理的数据,而B线程又修改了A线程处理的数理。显然这是由于全局资源造成的,有时为了解决此问题,优先考虑使用局部变量,退而求其次使用同步代码块,出于这样的安全考虑就必须牺牲系统处理性能,加在多线程并发时资源挣夺最激烈的地方,这就实现了线程的同步机制

    1.1 同步

    A线程要请求某个资源,但是此资源正在被B线程使用中,因为同步机制存在,A线程请求不到,怎么办,A线程只能等待下去

    1.2 异步

    A线程要请求某个资源,但是此资源正在被B线程使用中,因为没有同步机制存在,A线程仍然请求的到,A线程无需等待

    1.3 特点

    显然,同步最最安全,最保险的。而异步不安全,容易导致死锁,这样一个线程死掉就会导致整个进程崩溃,但没有同步机制的存在,性能会有所提升

    1.4 线程池

    要知道在计算机中任何资源的创建,包括线程,都需要消耗系统资源的。在WEB服务中,对于web服务器的响应速度必须要尽可能的快,这就容不得每次在用户提交请求按钮后,再创建线程提供服务。 为了减少用户的等待时间,线程必须预先创建,放在线程池中,线程池可以用HashTable这种数据结构来实现,看了Apach HTTP服务器的线程池的源代码,用是就是HashTable,KEY用线程对象value 用ControlRunnable,ControlRunnable是线程池中唯一能干活的线程,是它指派线程池中的线程对外提供服务。出于安全考虑,Apach HTTP服务器的线程池它是同步的。听说weblogic有异步的实现方式,没有研究过,不敢确定

    2. 关键字

    thread(线程)、thread-safe(线程安全)、intercurrent(并发的)
    synchronized(同步的)、asynchronized(异步的)、
    volatile(易变的)、atomic(原子的)、share(共享)

    3. 什么时候必须同步?什么叫同步?如何同步?

    要跨线程维护正确的可见性,只要在几个线程之间共享非 final 变量,就必须使用synchronized(或 volatile)以确保一个线程可以看见另一个线程做的更改

    为了在线程之间进行可靠的通信,也为了互斥访问,同步是必须的。这归因于java语言规范的内存模型,它规定了:一个线程所做的变化何时以及如何变成对其它线程可见。

    因为多线程将异步行为引进程序,所以在需要同步时,必须有一种方法强制进行。例如:如果2个线程想要通信并且要共享一个复杂的数据结构,如链表,此时需要确保它们互不冲突,也就是必须阻止B线程在A线程读数据的过程中向链表里面写数据(A获得了锁,B必须等A释放了该锁)。

    为了达到这个目的,java在一个旧的的进程同步模型——监控器(Monitor)的基础上实现了一个巧妙的方案:监控器是一个控制机制,可以认为是一个很小的、只能容纳一个线程的盒子,一旦一个线程进入监控器,其它的线程必须等待,直到那个线程退出监控为止。通过这种方式,一个监控器可以保证共享资源在同一时刻只可被一个线程使用。这种方式称之为同步。(一旦一个线程进入一个实例的任何同步方法,别的线程将不能进入该同一实例的其它同步方法,但是该实例的非同步方法仍然能够被调用)。

    同步和多线程关系:没多线程环境就不需要同步;有多线程环境也不一定需要同步。

    锁提供了两种主要特性:互斥(mutual exclusion) 和可见性(visibility)。

    互斥 即一次只允许一个线程持有某个特定的锁,因此可使用该特性实现对共享数据的协调访问协议,这样,一次就只有一个线程能够使用该共享数据。

    可见性要更加复杂一些,它必须确保释放锁之前对共享数据做出的更改对于随后获得该锁的另一个线程是可见的 —— 如果没有同步机制提供的这种可见性保证,线程看到的共享变量可能是修改前的值或不一致的值,这将引发许多严重问题

    小结:为了防止多个线程并发对同一数据的修改,所以需要同步,否则会造成数据不一致(就是所谓的:线程安全。如java集合框架中Hashtable和Vector是线程安全的。我们的大部分程序都不是线程安全的,因为没有进行同步,而且我们没有必要,因为大部分情况根本没有多线程环境)。

    4. 不要搞混了:同步、异步

    举个例子:普通B/S模式(同步)AJAX技术(异步)

    • 同步:提交请求->等待服务器处理->处理完返回 这个期间客户端浏览器不能干任何事
    • 异步:请求通过事件触发->服务器处理(这是浏览器仍然可以作其他事情)->处理完毕
    • 可见,彼“同步”非此“同步”——我们说的java中的那个共享数据同步(synchronized)
      一个同步的对象是指行为(动作),一个是同步的对象是指物质(共享数据)。

    5. Java同步机制有4种实现方式

    • ThreadLocal
    • synchronized( )
    • wait() 与 notify()
    • volatile

    目的:都是为了解决多线程中的对同一变量的访问冲突

    5.1 ThreadLocal

    ThreadLocal 保证不同线程拥有不同实例,相同线程一定拥有相同的实例,即为每一个使用该变量的线程提供一个该变量值的副本,每一个线程都可以独立改变自己的副本,而不是与其它线程的副本冲突。

    优势:提供了线程安全的共享对象与其它同步机制的区别:同步机制是为了同步多个线程对相同资源的并发访问,是为了多个线程之间进行通信;而ThreadLocal 是隔离多个线程的数据共享,从根本上就不在多个线程之间共享资源,这样当然不需要多个线程进行同步了。

    5.2 volatile

    volatile 修饰的成员变量在每次被线程访问时,都强迫从共享内存中重读该成员变量的值。而且当成员变量发生变化时,强迫线程将变化值回写到共享内存。

    优势:这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。

    缘由:Java 语言规范中指出,为了获得最佳速度,允许线程保存共享成员变量的私有拷贝,而且只当线程进入或者离开同步代码块时才与共享成员变量的原始值对比。这样当多个线程同时与某个对象交互时,就必须要注意到要让线程及时的得到共享成员变量的变化。而 volatile 关键字就是提示 VM :对于这个成员变量不能保存它的私有拷贝,而应直接与共享成员变量交互。

    使用技巧:在两个或者更多的线程访问的成员变量上使用 volatile 。当要访问的变量已在synchronized 代码块中,或者为常量时,不必使用。

    线程为了提高效率,将某成员变量(如A)拷贝了一份(如B),线程中对A的访问其实访问的是B。只在某些动作时才进行A和B的同步,因此存在A和B不一致的情况。volatile就是用来避免这种情况的。 volatile告诉jvm,它所修饰的变量不保留拷贝,直接访问主内存中的(读操作多时使用较好;线程间需要通信,本条做不到)

    Volatile 变量具有 synchronized 的可见性特性,但是不具备原子特性。这就是说线程能够自动发现 volatile 变量的最新值。Volatile 变量可用于提供线程安全,但是只能应用于非常有限的一组用例:多个变量之间或者某个变量的当前值与修改后值之间没有约束。

    只能在有限的一些情形下使用 volatile 变量替代锁。要使 volatile 变量提供理
    想的线程安全,必须同时满足下面两个条件:

    • 对变量的写操作不依赖于当前值;
    • 该变量没有包含在具有其他变量的不变式中。

    5.3 sleep() vs wait()

    sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,把执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。

    wait() 是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。
    (如果变量被声明为volatile,在每次访问时都会和主存一致;如果变量在同步方法或者同步块中被访问,当在方法或者块的入口处获得锁以及方法或者块退出时释放锁时变量被同步。)

    展开全文
  • java线程同步异步 多线程并发时,多个线程同时请求同一个资源,必然导致此资源的数据不安全,A线程修改了B线程的处理的数据,而B线程又修改了A线程处理的数理。显然这是由于全局资源造成的,有时为了解决此问题,...
  • 线程中的同步和异步区别 一、同步        所谓同步,就是发出一个功能调用时,在没有得到结果之前,该调用就不返回或继续执行后续操作。是多个线程同时访问同一资源,等待资源...
  • Java 多线程同步和异步详解

    千次阅读 2018-05-31 10:00:32
    转载自 https://www.cnblogs.com/mengyuxin/p/5358364.htmljava线程 同步异步 线程池1)多线程并发时,多个线程同时请求同一个资源,必然导致此资源的数据不安全,A线程修改了B线程的处理的数据,而B线程又修改了...
  • 线程同步异步

    千次阅读 2018-08-29 11:50:32
    线程同步异步 线程 同步 (synchronized) 异步 (asynchronized) 特点 A线程要请求某个资源,但是此资源正在被B线程使用中,因为同步机制存在,A线程请求不到,怎么办,A线程只能等待下去 A线程要请求...
  • 什么是线程同步和线程异步

    千次阅读 2019-05-31 13:41:39
    1、什么是线程同步和线程异步 线程同步:是多个线程同时访问同一资源,等待资源访问结束,浪费时间,效率不高 线程异步:访问资源时,如果有空闲时间,则可在空闲等待同时访问其他资源,实现多线程机制 异步处理...
  • 同步线程和异步线程区别

    千次阅读 2019-12-04 18:24:51
    1:同步可以看做是一个单线程操作,只要客户端请求了,在服务器没有反馈信息之前是一个线程阻塞状态...线程同步异步区别 线程同步是多个线程同时访问同一资源,等待资源访问结束,浪费时间,效率低 线程异步:...
  • CRT中有一个非常好的多线程函数 _beginthreadex(),通过该函数可以设计同步和异步运行的程序。如下,在别人的程序上改动后,可以更加深入理解线程同步和异步问题! --------------- #include <iostream> #...
  • 下面小编就为大家带来一篇java 线程之对象的同步和异步(实例讲解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • 1、在说多线程同步和异步:**指的是对“共享资源”访问的同步和异步。**比如两个线程同时访问某个static全局变量,这个时候就可能导致全局变量混乱。 2、在说ajax时同步和异步:指的是“行为”的同步和异步。比如...
  • lettuce - 高级Java Redis客户端,用于线程安全同步异步和reactive用法。 支持群集,Sentinel,管道编解码器。
  • 本文是总结知乎上面的知识点,虽然忘记了具体的链接地址,但是还是非常感谢知乎里面各位大神的分享! java 中使用 synchronized 是用来 表示该资源...1、多线程并不解决软件执行效率你硬件系统的瓶颈,它只是达.
  • 线程同步异步的最简单图解

    千次阅读 2018-02-19 12:01:40
    下面以四核CPU为例子,用图解的方式看同步和异步区别同步: 可以看出,所谓同步,就是每次只有一个线程能去执行,即使有多的计算资源(在这里指多余的CPU)也不会去用,一次只有一个线程去用,可以看作是...
  • 进程和线程 (一) 什么是进程? 计算机概念,程序在服务器运行时占据全部计算资源总和虚拟的,当一个程序开始运行时,它就是一个进程,进程包括运行中的程序程序所使用到的内存系统资源。而一个进程又是由多个...
  • 之前一直混淆同步和线程之间的概念今就这几个概念谈一下自己的理解 1、同步(Sync) 先说一下概念:所谓同步,就是发出一个功能调用时,在没有得到结果之前,该调用就不返回或继续执行后续操作。 我理解是:...
  • 进程线程通信,线程同步异步,进程通信经典
  • 同步异步”这个在我们学习多线程的时候,会接触到这个概念,后面所学的一系列多线程知识运用也是以这两个点开展的。由于学习的时候囫囵吞枣,导致我对这两个概念没法准确说出定义及其区别,现在记录一下。 如果...
  • 线程同步和异步区别 同步机制

    千次阅读 2013-09-04 12:56:22
    线程同步和线程异步有什么区别?(重要基础知识) 打个比方,如果你在等一个人, 同步的时候,你会一直等到她来了之后才做其他事情,这个过程除了等待你啥都不会做, 异步的时候,你一边在等,可能一边玩游戏或者...
  • 线程同步异步-复习

    2019-06-05 14:05:03
    一个线程对象,被启动一次...每个线程有自己的方法栈,各自执行,就是异步,需要协同执行就是同步。 对对象加锁 在被持有对象(共享对象)中定义同步语句,如single对象,而不是在线程对象中定义。除非线程对象中有...
  • 线程同步:多个线程同时访问同一资源,等待资源访问结束,浪费时间,效率低 线程异步:访问资源时在空闲等待时同时访问其他资源,实现多线程机制 异步处理就是,你现在问我问题,我可以不回答你,等我用时间了再处理...
  • iOS 多线程 同步和异步 串行并行

    千次阅读 2018-07-06 18:58:38
    而串行并行、同步和异步,这四个词同时出现的地方是dispatch_queue。NSOperationQueue贴心的隐藏了这些东西,已经不需要我们来操心了。所以下面会使用dispatch_queue来展开。线程线程是程序执行流的最小单元。 ...
  • 本下载解决delphiXE在处理多线程时,如何对各线程进行管理、如何做到中途中断执行多线程时的线程安全,如何在多线程内部进行UI同步等等,还可看我的博文同步

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 282,312
精华内容 112,924
关键字:

线程同步和异步的区别