powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Псевдо-многопоточность в JS
7 сообщений из 7, страница 1 из 1
Псевдо-многопоточность в JS
    #35538593
Tubrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Только начал вникать в JS и вскоре обеспокоился возможностями set(Interval/Timeout), а именно, синхронизацией доступа к данным, если запущенные ф-ии выполняются параллельно. Проведя несколько тестов, пришел к выводу, что никакой параллельности в JS нет. Вообщем, заключение таково, что каждая ф-ия выполняется атомарно от начала до конца, только после этого может начать выполняться другая ф-ия, но код породивший отложенную ф-ию может быть прерван, если не находится в цикле (видимо чтобы синхронизировать доступ и к таким данным, как массивы). Но если выполняется отложенная ф-ия, она никогда не прерывается, даже если она не в цикле.

Мне интересно, насколько эти выводы верны или как обстоит дело в действительности. Кто какой приоритет имеет (в каких случаях можно прервать выполнение текущего кода, а в каких нет), если заданы несколько отложенных ф-ий, и есть вероятность, что старт любой ф-ии может прийти на время выполения другой или своей же копии.
...
Рейтинг: 0 / 0
Псевдо-многопоточность в JS
    #35538600
apapacy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интерпретатор JavaScript однопоточный. Прерываться текущая функция может неявным вызовом SUSPEND при выполнении alert() и , возможно, нескольких других функций вывода сообщений. Поэтому их не рекомендуют использовать. setInterval() немного по-разному работают в IE и других браузерах. IE пропускает вызовы функции, а ФФ, Опера ставит их в очередь а потом вызывает без перерывов. (Что правильнее - кто его знает?)
...
Рейтинг: 0 / 0
Псевдо-многопоточность в JS
    #35538611
Tubrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
apapacyIE пропускает вызовы функции, а ФФ, Опера ставит их в очередь а потом вызывает без перерывов. (Что правильнее - кто его знает?)

*потом* - это когда произойдет выход их текущей ф-ии, или когда весь код, создавший отложенную очередь, завершится?
...
Рейтинг: 0 / 0
Псевдо-многопоточность в JS
    #35538619
apapacy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вход и Выход из функции не имеет значения (кроме SUSPEND при alert()).
Весь код выполняется до конца. После окончания кода оказывается что за время отработки кода вызывались события onclick, onblur ..., функции setInterval, setTimeout, onreadystatechange. Все они по-очереди вызываются и отрабатываются тоже до конца.
...
Рейтинг: 0 / 0
Псевдо-многопоточность в JS
    #35538624
Tubrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за ответы.
Что значит:
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.
var mass = [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ];
var dbg = new Array();

function Plus()
{
    dbg[dbg.length] = "<b>....begin Plus</b><br>";
    for (i =  0 ; i < mass.length; i++)
        mass[i]++;
        
    for (i =  0 ; i < mass.length; i++)
        mass[i]++;
    
    for (i =  0 ; i < mass.length; i++)
        mass[i]++;
       
    setTimeout('Plus()',  1 );
    dbg[dbg.length] = "<b>....end Plus</b><br>";
}

function Minus()
{
    dbg[dbg.length] = "<b>begin Minus</b><br>";
    for (i =  0 ; i < mass.length; i++)
        mass[i]--;
    
    for (i =  0 ; i < mass.length; i++)
        mass[i]--;
    
    for (i =  0 ; i < mass.length; i++)
        mass[i]--;
        
    setTimeout('Minus()',  1 );
    dbg[dbg.length] = "<b>end Minus</b><br>";
}

function ShowMass()
{
    var str = "[" + mass.length + "]: <br>";
    for (i =  0 ; i < mass.length; i++)
        str += "<b>" + mass[i] + " </b>";
        
    str += "<br>[" + dbg.length + "]: <br>";
   
    for (i =  0 ; i < dbg.length; i++)
        str += "<b>" + dbg[i] + " </b>";
        
    str += "<br>";
    document.getElementsByTagName('body')[ 0 ].innerHTML += str;
}

function Start()
{
    setTimeout('Plus()',  1 );
    dbg[dbg.length] =  ">> Plus()_has_been_set_<br>";
    
    setTimeout('Minus()',  1 );
    dbg[dbg.length] =  ">> Minus()_has_been_set_<br>";
    
    setTimeout('ShowMass()',  3000 );
    dbg[dbg.length] =  ">> ShowMass()_has_been_set_<br>";
}
...
Рейтинг: 0 / 0
Псевдо-многопоточность в JS
    #35538636
apapacy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если Вы задали setInterval(f,1000) то через 10 секунд функция будет вызвана 10 раз.
Если за это время будет вызвана еще некоторая "неожиданная" функция, то на время выполения этой функции IE не вызовет функцию, прорустит вызов и начнет отсчет от времени окончания "неожиданной" функции. То есть IE соблюдает правило вызывать через 1000мс. А ФФ отложит вызов и подряд вызовет, например 2-3 раза без перерыва, подряд. То есть будет выполнено правило за N*1000мс вызвать N раз.
...
Рейтинг: 0 / 0
Псевдо-многопоточность в JS
    #35538638
Tubrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ага, ясно, а я было подумал, что пропопустит вовсе :)
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Псевдо-многопоточность в JS
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]