作者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