Паралельное программироввание в JavaScript

Gaishnik

Я делаю асинхронный запрос к серверу и указываю callback функцию. Эта функция выполняется в параллельном потоке или в том же самом? Если верен вариант 1, то как синхронизировать потоки? А если верен вариант 2, то как сделать, чтобы несколько операторов выполнялись атомарно и между ними не вклинилась callback функция?

Serab

Не знаю как в этой вашей java'е, но в винде в общем поток не может прерываться. В COM, например, эта функция была бы вызвана либо в параллельном потоке, либо доставлена через очередь сообщений в зависимости от модели многопоточности.
Чтобы не "вклинивалась" callback-функция можно использовать обычные примитивы синхронизации (в данном случае критическую секцию или еще что).

artimon

Javascript однопоточный.
callback-функция не может никуда вклинится. Она начнёт выполнятся когда интерпретатор освободится.

Gaishnik

Javascript однопоточный.
callback-функция не может никуда вклинится. Она начнёт выполнятся когда интерпретатор освободится.
Все понятно, спасибо за ответ.
Не знаю как в этой вашей java'е, но в винде в общем поток не может прерываться. В COM, например, эта функция была бы вызвана либо в параллельном потоке, либо доставлена через очередь сообщений в зависимости от модели многопоточности.
В Java все точно так же, мы про JavaScript говорим, там даже поток нельзя создать.

klyv

а это в стандарте написано или реализовывают так?

artimon

Стандарт не нашёл, но все известные мне браузерные реализации запускают JS в отдном потоке для каждой страницы.

kruzer25

И даже хром?

artimon

Даже есть внутри он и умеет запускать несколько потоков, ведёт он себя точно так же, как и остальные браузеры.

Serab

Javascript однопоточный.
ну и что? Я просто написал, что в винде в принципе поток не может прерываться. Привел пример. Вы все такие злые =)

Bibi

гг, а как же worker'ы в альфе фаерфокса?

nikita270601

Ну да, еще есть WorkerPool в Google Gears.

Helga87

А еще flash-ки каждая в своем треде, насколько я помню.

bansek

боюсь что атомарности достичь нельзя, т.к. нет языковых конструкций / системных вызовов для этого 0_о
народ в интернете тоже толком ничего не знает ...
http://listentorick.blogspot.com/2008/03/threading-and-javas...
http://my2iu.blogspot.com/2006/10/javascript-is-multi-thread...
http://odetocode.com/Blogs/scott/archive/2007/01/08/9734.asp...

Gaishnik

Можно сделать многопоточный javascript, если планирование потоков возложить на программиста. В GWT, с которым я сейчас работаю, есть специальная либа для длинных вычислений, чтобы у пользователя не создавалось впечатление, что браузер повис. Она основана на том, что поток обрывает вычисления и ставит таймер на их возобновление. Интерпретатор освобождается и может реагировать на события UI.
Оставить комментарий
Имя или ник:
Комментарий: