Как использовать libuv с виртуальной машиной с байт-кодом

Как бы вы использовали libuv внутри виртуальной машины с байт-кодом, скажем, у меня есть эта функция

void vm_run(vm_t* vm);

Что запускает виртуальную машину для выполнения кода, она будет продолжать работать до тех пор, пока это делает код пользователя, теперь я хочу добавить асинхронный материал в языковую виртуальную машину, скажем, setTimeout/setInterval, например JavaScript, я могу открыть нативную функцию пользователю, но когда чтобы фактически запустить цикл событий, uv_run блокируется до тех пор, пока не останется событий, и виртуальная машина также блокируется до тех пор, пока код пользователя не закончится, как мне запустить оба вместе, чтобы виртуальная машина выполняла асинхронный ввод-вывод, я просто пытаюсь понять Идея цикла событий правильно в таком контексте, кто-нибудь, пожалуйста, направьте меня на правильный путь.


person PoLLeN    schedule 02.12.2019    source источник


Ответы (1)


Я нашел способ, вам нужно запустить цикл событий uv, когда обычное выполнение заканчивается для обработки событий, поэтому мне нужно сделать API для запуска функций на виртуальной машине в любое время (другими словами, возврат из vm_run не означает, что весь код готово, дальше будем выполнять больше функций)

person PoLLeN    schedule 16.12.2019