Паралельное программироввание в JavaScript
Чтобы не "вклинивалась" callback-функция можно использовать обычные примитивы синхронизации (в данном случае критическую секцию или еще что).
callback-функция не может никуда вклинится. Она начнёт выполнятся когда интерпретатор освободится.
Javascript однопоточный.Все понятно, спасибо за ответ.
callback-функция не может никуда вклинится. Она начнёт выполнятся когда интерпретатор освободится.
Не знаю как в этой вашей java'е, но в винде в общем поток не может прерываться. В COM, например, эта функция была бы вызвана либо в параллельном потоке, либо доставлена через очередь сообщений в зависимости от модели многопоточности.В Java все точно так же, мы про JavaScript говорим, там даже поток нельзя создать.
а это в стандарте написано или реализовывают так?
Стандарт не нашёл, но все известные мне браузерные реализации запускают JS в отдном потоке для каждой страницы.
И даже хром?
Даже есть внутри он и умеет запускать несколько потоков, ведёт он себя точно так же, как и остальные браузеры.
Javascript однопоточный.ну и что? Я просто написал, что в винде в принципе поток не может прерываться. Привел пример. Вы все такие злые =)
гг, а как же worker'ы в альфе фаерфокса?
Ну да, еще есть WorkerPool в Google Gears.
А еще flash-ки каждая в своем треде, насколько я помню.
народ в интернете тоже толком ничего не знает ...
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...
Можно сделать многопоточный javascript, если планирование потоков возложить на программиста. В GWT, с которым я сейчас работаю, есть специальная либа для длинных вычислений, чтобы у пользователя не создавалось впечатление, что браузер повис. Она основана на том, что поток обрывает вычисления и ставит таймер на их возобновление. Интерпретатор освобождается и может реагировать на события UI.
Оставить комментарий
Gaishnik
Я делаю асинхронный запрос к серверу и указываю callback функцию. Эта функция выполняется в параллельном потоке или в том же самом? Если верен вариант 1, то как синхронизировать потоки? А если верен вариант 2, то как сделать, чтобы несколько операторов выполнялись атомарно и между ними не вклинилась callback функция?