同步和异步的异同

来源:互联网 发布:php ftp_pasv 编辑:程序博客网 时间:2024/05/18 20:51

既然说到同步和异步,先来看看概念

同步就是指一个进程在执行某个请求的时候,若该请求需要一段时间才能返回信息,那么这个进程将会一直等待下去,直到收到返回信息才继续执行下去

异步是指进程不需要一直等下去,而是继续执行下面的操作,不管其他进程的状态。当有消息返回时系统会通知进程进行处理,这样可以提高执行的效率。

概念之后就是用法了

首先是在Linux下的用法,在Linux下实现同步的方法主要有临界区,互斥量,信号量,事件这四种基本方法。

     临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。在任意时刻只允许一个线程对共享资源进行访问,如果有多个线程试图访问公共资 源,那么在有一个线程进入后,其他试图访问公共资源的线程将被挂起,并一直等到进入临界区的线程离开,临界区在被释放后,其他线程才可以抢占。

互斥量:采用互斥对象机制。 只有拥有互斥对象的线程才有访问公共资源的权限,因为互斥对象只有一个,所以能保证公共资源

不会同时被多个线程访问。互斥不仅能实现同一应用程序的公共资源安全共享,还能实现不同应用程序的公共资源安全共享 .互斥量比

临界区复杂。因为使用互斥不仅仅能够在同一应用程序不同线程中实现资源的安全共享,而且可以在不同应用程序的线程之间实现对

资源的安全共享。

信号量它允许多个线程在同一时刻访问同一资源,但是需要限制在同一时刻访问此资源的最大线程数目 。信号量对象对线程的同步方式与

前面几种方法不同,信号允许多个线程同时使用共享资源,这与操作系统中的PV操作相同。它指出了同时访问共享资源的线程最大

数目。它允许多个线程在同一时刻访问同一资源,但是需要限制在同一时刻访问此资源的最大线程数目。

事件:通过通知操作的方式来保持线程的同步,还可以方便实现对多个线程的优先级比较的操作 。


说完了Linux,下面看看在Java中同步和异步机制吧。。。笔试题做到过,当时有点蒙蔽

概念和上面差不多,同步就是请求有返回时才能发送下一个请求,是线程安全的,异步是当发送一个请求时,不需要等待返回,可以继续发送下一个请求,但是不安全

    Java中的运用同步和异步的地方

1.ArrayList 和HashMap是异步,Vector和HashTable是同步

2.AJAX技术是异步,普通B/S模式是同步

3.用异步输入输出流编写Socket进程通信程序












1 0
原创粉丝点击