同步和异步的区别、同步与阻塞的关系

  • 同步

     同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。  

  要想实现同步操作,必须要获得线程的对象锁。获得它可以保证在同一时刻只有一个线能够进入临界区,并且在这个锁被释放之前,其他的线程都不能再进入这个临界区。如果其他线程想要获得这个对象的锁,只能进入等待队列等待。只有当拥有该对象锁的线程退出临界区时,锁才会被释放,等待队列中优先级最高的线程才能获得该锁。

      实现同步的方式有两种:同步方法、同步代码块。

 

  • 异步

     当一个异步过程调用发出后,调用者不会立刻得到结果。实际处理这个吊用的部件是在调用发出后,通过状态、通知来通知调用者,或通过回调函数处理这个调用。  

  由于每个线程都包含了运行时自身所需要的数据或方法,因此,在进行输入输出时,不必关系其他线程的状态或行为,也不必等到输入输出处理完毕才返回。当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,异步能够提高程序的效率。

 

  • 阻塞

  阻塞调用是指调用结果返回之前,当前线程会被挂起。函数只有在得到结果之后才会返回。

 

  • 非阻塞

  指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回。

        

  • 同步与阻塞

       同步是个过程,阻塞是线程的一种状态。多个线程操作共享变量时可能会出现竞争。这时需要同步来防止两个以上的线程同时进入临界区,在这个过程中,后进入临界区的线程将阻塞,等待先进入的线程走出临界区。

  • 线程同步一定发生阻塞吗?

       线程同步不一定发生阻塞!!!线程同步的时候,需要协调推进速度,互相等待和互相唤醒会发生阻塞。

posted on 2017-03-31 12:08  一个不会coding的girl  阅读(11348)  评论(0编辑  收藏  举报

导航