2013-12-20 2 views
4

Я, наконец, выбрал v8 как скриптовый движок для моего приложения, когда понял, что пропустил важное место: параллелизм.V8 потокобезопасен на данный момент?

Я решил пойти с v8 вместо lua из-за пары ключевых факторов, но, по-видимому, я не могу писать потокобезопасный код или многопоточную задачу в целом с v8.

В официальных документах я не нашел ссылки на параллельные функции v8, они описывают GC, что v8 написан на C++, он поддерживает множество платформ и т. Д., Но ничего не касается потоковой передачи на обеих вики и официальную документацию для встраивания v8 в приложение C++.

Вопрос: как я должен думать о v8? Я должен представить свое приложение как набор однопоточных/потокобезопасных функций прямо из C++?

ответ

6

V8 не является потокобезопасным, но это не значит, что вы не можете использовать его в поточной среде. Единственное условие для этого - использовать объект V12 Locker, всякий раз, когда вы получаете доступ к связанным с V8 материалам.

Это очень просто, просто создать новый экземпляр v8::Locker, а затем, когда вы закончите с тем, что действия вы делали в V8, создать экземпляр v8::Unlocker

В моем опыте с документацией V8 .. В .it royally sucks и кажется (в моем использовании так или иначе) лучшим способом научиться его использовать был проб и ошибок.

EDIT: This ответ здесь объясняет многопоточного использование V8 лучше, чем я:

+0

как '' Isolate' и Locker' звук как мьютекс из C/C++, но я не получаю 1 вещь, как запустить несколько потоков? в связанном ответе есть ссылка, в которой говорится, что v8 работает только по 1 потоку за раз, верно ли это для любого сценария внутри v8? – user2485710

+0

Насколько я знаю, это правда, V8 может работать только на одном потоке. Хотя для подтверждения первой части вашего комментария «Изоляция» является в основном чистым экземпляром V8. Вы создаете новый 'Isolate' для разделения выполнения скриптов differnet. Если что-то «Locker» более похоже на мьютекс, чем «Изоляция». – rstat1

Смежные вопросы