Re: [討論] javascript是共時、多執行緒嗎?

看板Ajax作者 (無虧/明月幾時有?)時間12年前 (2011/11/07 15:35), 編輯推噓0(007)
留言7則, 2人參與, 最新討論串7/11 (看更多)
我剛剛測試了一下 發現其實鍵盤事件並不會同步運行 當我按下按鍵 程式開始跑上萬次的 onj.innerHTML = i 此時其他按鍵的事件會無法觸發 但更嚴格來說 這還是因瀏覽器的實作而異 以ie來說 在迴圈跑完前 任何事件都會被忽略 而fx就像前面有人提過的 會排進queue裡面 所以跑完迴圈後還是會處理我剛剛另外按的按鍵事件。 由此推之,我們無法完全保證未來不會有瀏覽器採取多工方式處理事件。 另一方面 我發現我原本程式的同步問題 確確實實主要由ajax造成 只要 async = false 同步問題就會解決。 所以我得到一個這樣的結論: 純javascript由於瀏覽器實作細節的差異 可能在嚴苛的條件下發生同步問題。 另一方面 很多時候 ajax 使用 async = true 是勢在必行。 所以我們不能完全免除同步問題發生的可能 也因此 Wallace variance of bakery's algorithm 還是有實作的必要性。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.121.161.155 ※ 編輯: ec75413 來自: 59.121.161.155 (11/07 15:40)

11/07 16:03, , 1F
你的問題跟synchronization有本質上的差別 只是callback
11/07 16:03, 1F

11/07 16:04, , 2F
誰先被排入queue誰後排入而已 但兩個callback並不會交錯
11/07 16:04, 2F

11/07 16:06, , 3F
一定是一個執行完才執行另一個 所以只要做判斷 讓應該先跑
11/07 16:06, 3F

11/07 16:07, , 4F
先跑 不該先跑的settimeout 直到別人跑完
11/07 16:07, 4F

11/07 16:09, , 5F
再跑自己 如果你寫上bakery 保證你死得很慘
11/07 16:09, 5F

11/07 16:23, , 6F
基本上用setTimeout(...,0);應該就差不多了
11/07 16:23, 6F

11/07 16:23, , 7F
反正以後多工有web worker這種東西
11/07 16:23, 7F
文章代碼(AID): #1EjufRzb (Ajax)
討論串 (同標題文章)
文章代碼(AID): #1EjufRzb (Ajax)