Pages - Menu

2016年8月12日 星期五

程式的同步(Synchronous)與非同步(Asynchronous)的差別

說真的,每次碰到這個都會忘記我到底寫的是非同步還是同步。
實在是很難記。因為這個的解釋,常常跟中文搞混(該說中文博大精深嗎…)。
中文,同時進行(這我們常常當作是同步),但其實是相反的。
同時進行應該是『非同步』,按部就班才是『同步』。
補充:非同步的英文簡寫通常為 async 。
同步
看到有人翻的比較好的同步意思:就是要執行的這些工作彼此之間是有「同步」的關係的。他還是一樣寫同步…
簡單來說,同步就是沒用到執行緒,或者是所謂的流水線寫法
e.g.

a=0;b=10;
threading.thread.sleep(10000)
c=a-b

程式是一行一行的往下跑。中間叫你停10秒,就是必須等到他停完10秒後,
才會去跑C的值出來。
非同步
顧名思義:非(不是)同步。也就是他不是一行一行往下執行,
要寫例子有點麻煩,以現在最常用的ajax(Asynchronous JavaScript and XML)來講,
當你使用ajax去撈資料的時候,除非你是寫在success裡面,
不然等他撈資料前,他會先去執行其他的程式。等到資料庫回傳資料後,再去執行success裡面的資料。
e.g.

$.ajax({
            type: "POST",
            url: "index.aspx/GetTable",
            data: "{'Line':'" + Line + "','LineNo':'" + No + "','FillType':'" + FillType + "', 'FillLot':'" + FillLot + "' }",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (response) { ……}

})

沒有留言:

張貼留言