作者ec75413 (無虧/明月幾時有?)
看板Ajax
標題Re: [討論] javascript是共時、多執行緒嗎?
時間Mon Nov 7 15:35:52 2011
我剛剛測試了一下
發現其實鍵盤事件並不會同步運行
當我按下按鍵 程式開始跑上萬次的 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)
1F:→ sk1765:你的問題跟synchronization有本質上的差別 只是callback 11/07 16:03
2F:→ sk1765:誰先被排入queue誰後排入而已 但兩個callback並不會交錯 11/07 16:04
3F:→ sk1765:一定是一個執行完才執行另一個 所以只要做判斷 讓應該先跑 11/07 16:06
4F:→ sk1765:先跑 不該先跑的settimeout 直到別人跑完 11/07 16:07
5F:→ sk1765:再跑自己 如果你寫上bakery 保證你死得很慘 11/07 16:09
6F:→ weiyucsie:基本上用setTimeout(...,0);應該就差不多了 11/07 16:23
7F:→ weiyucsie:反正以後多工有web worker這種東西 11/07 16:23