同步和异步有何异同,什么场景使⽤
同步和异步有何异同,什么场景使⽤,举例说明!
2016年11⽉30⽇ 18:47:26  阅读数:1752更多
个⼈分类:
同步:发送⼀个请求,等待返回,然后再发送下⼀个请求
异步:发送⼀个请求,不等待返回,随时可以再发送下⼀个请求
同步可以避免出现死锁,读脏数据的发⽣,⼀般共享某⼀资源的时候⽤,如果每个⼈都有修改权限,同时修改⼀个⽂件,有可能使⼀个⼈读取另⼀个⼈已经删除的内容,就会出错,同步就会按顺序来修改。
异步则是可以提⾼效率了,现在cpu都是双核,四核,异步处理的话可以同时做多项⼯作,当然必须保证是可以并发处理的。
同步和异步最⼤的区别就在于。⼀个需要等待,⼀个不需要等待。
⽐如发短信,就是⼀个异步例⼦。发起者不关⼼接收者的状态。不需要等待接收者的返回信息,则可以
进⾏下⼀次发送。
电话,就是⼀个同步例⼦。发起者需要等待接收者,接通电话后,通信才开始。需要等待接收者的返回信息
⽽我们平时经常讨论的同步问题多发⽣在多线程环境中的数据共享问题。即当多个线程需要访问同⼀个资源时,它们需要以某种顺序来确保该资源在某⼀特定时刻只能被⼀个线程所访问,如果使⽤异步,程序的运⾏结果将不可预料。因此,在这种情况下,就必须对数据进⾏同步,即限制只能有⼀个进程访问资源,其他线程必须等待。
实现同步的机制主要有临界区、互斥、信号量和事件
如果有如果临界区:通过对多线程的串⾏化来访问公共资源或⼀段代码,速度快,适合控制数据访问。在任意时刻只允许⼀个线程对共享资源进⾏访问,如果有多个线程试图访问公共资 源,那么在有⼀个线程进⼊后,其他试图访问公共资源的线程将被挂起,并⼀直等到进⼊临界区的线程离开,临界区在被释放后,其他线程才可以抢占。
互斥量:采⽤互斥对象机制。 只有拥有互斥对象的线程才有访问公共资源的权限,因为互斥对象只有⼀个,所以能保证公共资源不会同时被多个线程访问。互斥不仅能实现同⼀应⽤程序的公共资源安全
共享,还能实现不同应⽤程序的公共资源安全共享 .互斥量⽐临界区复杂。因为使⽤互斥不仅仅能够在同⼀应⽤程序不同线程中实现资源的安全共享,⽽且可以在不同应⽤程序的线程之间实现对资源的安全共享。 信号量:它允许多个线程在同⼀时刻访问同⼀资源,但是需要限制在同⼀时刻访问此资源的最⼤线程数⽬ 。信号量对象对线程的同步⽅式与前⾯⼏种⽅法不同,信号允许多个线程同时使⽤共享资源,这与操作系统中的PV操作相同。它指出了同时访问共享资源的线程最⼤数⽬。它允许多个线程在同⼀时刻访问同⼀资源,但是需要限制在同⼀时刻访问此资源的最⼤线程数⽬。
事件:通过通知操作的⽅式来保持线程的同步,还可以⽅便实现对多个线程的优先级⽐较的操作 。