同步和異步的區別、同步與阻塞的關系


  • 同步

     同步,就是在發出一個功能調用時,在沒有得到結果之前,該調用就不返回。  

  要想實現同步操作,必須要獲得線程的對象鎖。獲得它可以保證在同一時刻只有一個線能夠進入臨界區,並且在這個鎖被釋放之前,其他的線程都不能再進入這個臨界區。如果其他線程想要獲得這個對象的鎖,只能進入等待隊列等待。只有當擁有該對象鎖的線程退出臨界區時,鎖才會被釋放,等待隊列中優先級最高的線程才能獲得該鎖。

      實現同步的方式有兩種:同步方法、同步代碼塊。

 

  • 異步

     當一個異步過程調用發出后,調用者不會立刻得到結果。實際處理這個吊用的部件是在調用發出后,通過狀態、通知來通知調用者,或通過回調函數處理這個調用。  

  由於每個線程都包含了運行時自身所需要的數據或方法,因此,在進行輸入輸出時,不必關系其他線程的狀態或行為,也不必等到輸入輸出處理完畢才返回。當應用程序在對象上調用了一個需要花費很長時間來執行的方法,並且不希望讓程序等待方法的返回時,就應該使用異步編程,異步能夠提高程序的效率。

 

  • 阻塞

  阻塞調用是指調用結果返回之前,當前線程會被掛起。函數只有在得到結果之后才會返回。

 

  • 非阻塞

  指在不能立刻得到結果之前,該函數不會阻塞當前線程,而會立刻返回。

        

  • 同步與阻塞

       同步是個過程,阻塞是線程的一種狀態。多個線程操作共享變量時可能會出現競爭。這時需要同步來防止兩個以上的線程同時進入臨界區,在這個過程中,后進入臨界區的線程將阻塞,等待先進入的線程走出臨界區。

  • 線程同步一定發生阻塞嗎?

       線程同步不一定發生阻塞!!!線程同步的時候,需要協調推進速度,互相等待和互相喚醒會發生阻塞。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM