для запуска Wasm бинарников с WASI (интерфейсом к сисколам), нужно уметь прерывать его исполнение по таймауту. Т.е. нужно защититься от бесконечных циклов в васм коде, а также от того, что какой-то системный вызов завис. Задача максимум - сделать выполнение васма асинхронным.
Сейчас мы используем wasmtime c async фичей и wasmtime-wasi с wasi_tokio фичей. Wasmtime умеет периодически прерывать исполнение васм кода, умеет пробрасывать Poll::Pending из предоставленных экспортов. Вызов sleep изнутри васмика сделан неблокирующим. Проблема в том, что все IO в wasmtime_wasi сделано блокирующим, и кажется что вариант только один — сделать свою реализацию WASI с полностью неблокирующим IO, что достаточно долго.
Если кто-то решал похожую задачу (не обязательно связанную с Wasm/WASI), то что использовали? Может быть есть какое-то общее решение, при этом лучше, чем порождение нового потока и pthread_cancel.
а это ж не по расту чат
ну так и вопрос не по расту 🙂
а при чем тогда тут токио и полл::пендинг?
они не влияют на суть вопроса
Обсуждают сегодня