希格工作室

2012年10月19日 星期五

同步與非同步 - 口語化告訴你 Async

     今天是期中考,小明帶著滿心不悅的心情坐在坐位上等待著鐘響,當鐘響了,老師帶著考卷進來了,老師將考卷發給每一位學生,小明收到考卷後,開始了40分鐘的答案撰寫,而老師則在講臺旁坐著,等著同學答題,有的同學寫很快,20分鐘就交卷了,而小明卻寫了40分鐘才有辦法交卷,這段時間裡,由於老師必須要等同學都交卷了,才能收齊後回去教師室進行改考卷的動作,所以老師也只好等著小明一直到40分鐘後答完才能離開;考試結束了,小明很高興,招攬同學下課一起去網咖連線打電玩打了一整個下午,但是這段時間裡,老師並沒有閒著,因為老師正在教師室裡拼命的改同學的考卷,到了隔天上課,老師發回了考卷,但是此時小明卻高興不起來了。





    因為小明不及格,回家要被媽媽打~~~~~






    以上情境,如果我們把它翻譯成程式來撰寫,哪邊屬於同步?哪邊屬於非同步?
    

    之所以會想到這段故事,是因為和同事聊天時提到的,我們多多少少都寫過、看過相關程式或邏輯,但是如果你要解釋或說明時,要怎麼解釋給一個完全不懂的人聽呢?通常我們會貼了一大堆語法來說明,再不然就像網路上一堆說著專有名詞的文章,看完了其實只有"啊?"的感想,如果要你再說明給別人聽,同事說:仔細想想還真不知道怎麼講耶?


   好了,回到剛剛的問題,哪邊屬於同步與非同步呢?其實整串文仔細想想,很多地方都可以扯到,不過我只針對兩個大項來說:
  1. 小明寫了40分鐘考卷,而老師則坐在講臺旁等著。

  2. 小明和同學打網咖,而老師在改考卷。

這兩個情境中

(1)應該就屬於同步類的等待,因為對老師來講,我要進行下一步的資源,也就是改考卷所需要的考卷,還在小明那邊,我必需要等小明寫(處理)完,才有辦法進行。

(2)則應該屬於非同步的處理,因為對小明來講,小明想要知道的是我最後考完試之後的結果與分數,但是在等分數出來之前,小明不需要一直留在學校裡等老師改完,小明可以趁這段時間去做別的事(打網咖),等到明天,老師應該就改好考卷了,所以小明就花了一個下午去玩,之後就回家休息了,但是老師呢?可能得花一整個下午加上一整個晚上才能改完所有同學的考卷。

題外話,最後老師精神不濟,找了其他人幫他發考卷給同學,這個算...?


其它可參考的網站
What are actually synchronous/asynchronous operations