|
|
|
Псевдо-многопоточность в JS
|
|||
|---|---|---|---|
|
#18+
Только начал вникать в JS и вскоре обеспокоился возможностями set(Interval/Timeout), а именно, синхронизацией доступа к данным, если запущенные ф-ии выполняются параллельно. Проведя несколько тестов, пришел к выводу, что никакой параллельности в JS нет. Вообщем, заключение таково, что каждая ф-ия выполняется атомарно от начала до конца, только после этого может начать выполняться другая ф-ия, но код породивший отложенную ф-ию может быть прерван, если не находится в цикле (видимо чтобы синхронизировать доступ и к таким данным, как массивы). Но если выполняется отложенная ф-ия, она никогда не прерывается, даже если она не в цикле. Мне интересно, насколько эти выводы верны или как обстоит дело в действительности. Кто какой приоритет имеет (в каких случаях можно прервать выполнение текущего кода, а в каких нет), если заданы несколько отложенных ф-ий, и есть вероятность, что старт любой ф-ии может прийти на время выполения другой или своей же копии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2008, 23:54 |
|
||
|
Псевдо-многопоточность в JS
|
|||
|---|---|---|---|
|
#18+
Интерпретатор JavaScript однопоточный. Прерываться текущая функция может неявным вызовом SUSPEND при выполнении alert() и , возможно, нескольких других функций вывода сообщений. Поэтому их не рекомендуют использовать. setInterval() немного по-разному работают в IE и других браузерах. IE пропускает вызовы функции, а ФФ, Опера ставит их в очередь а потом вызывает без перерывов. (Что правильнее - кто его знает?) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2008, 00:02 |
|
||
|
Псевдо-многопоточность в JS
|
|||
|---|---|---|---|
|
#18+
apapacyIE пропускает вызовы функции, а ФФ, Опера ставит их в очередь а потом вызывает без перерывов. (Что правильнее - кто его знает?) *потом* - это когда произойдет выход их текущей ф-ии, или когда весь код, создавший отложенную очередь, завершится? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2008, 00:12 |
|
||
|
Псевдо-многопоточность в JS
|
|||
|---|---|---|---|
|
#18+
Вход и Выход из функции не имеет значения (кроме SUSPEND при alert()). Весь код выполняется до конца. После окончания кода оказывается что за время отработки кода вызывались события onclick, onblur ..., функции setInterval, setTimeout, onreadystatechange. Все они по-очереди вызываются и отрабатываются тоже до конца. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2008, 00:20 |
|
||
|
Псевдо-многопоточность в JS
|
|||
|---|---|---|---|
|
#18+
Спасибо за ответы. Что значит: apapacy IE пропускает вызовы функции ? Следующий код дает одинаковый результат в IE и FF: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2008, 00:38 |
|
||
|
Псевдо-многопоточность в JS
|
|||
|---|---|---|---|
|
#18+
Если Вы задали setInterval(f,1000) то через 10 секунд функция будет вызвана 10 раз. Если за это время будет вызвана еще некоторая "неожиданная" функция, то на время выполения этой функции IE не вызовет функцию, прорустит вызов и начнет отсчет от времени окончания "неожиданной" функции. То есть IE соблюдает правило вызывать через 1000мс. А ФФ отложит вызов и подряд вызовет, например 2-3 раза без перерыва, подряд. То есть будет выполнено правило за N*1000мс вызвать N раз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2008, 00:54 |
|
||
|
|

start [/forum/topic.php?fid=22&fpage=320&tid=1455888]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
38ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
| others: | 231ms |
| total: | 359ms |

| 0 / 0 |
