コンテンツにスキップ

WASMプロセス

WASMモジュールはprocess.wasmエントリ種別を通じてプロセスとして実行できます。プロセスはWippyプロセスホスト内で実行され、起動、監視、監督下シャットダウンの完全なプロセスライフサイクルをサポートします。

entries:
- name: wasm_binaries
kind: fs.directory
directory: ./wasm
- name: compute_worker
kind: process.wasm
fs: myns:wasm_binaries
path: /worker.wasm
hash: sha256:292b796376f8b4cc360acf2ea6b82d1084871c3607a079f30b446da8e5c984a4
method: compute
フィールド必須説明
fsYesバイナリを含むファイルシステムエントリID
pathYesファイルシステム内の.wasmファイルへのパス
hashYes整合性検証用のSHA-256ハッシュ
methodYes実行するエクスポート関数名
transportNo呼び出しトランスポート: payload(デフォルト)またはwasi-http
witNoraw/coreモジュール用のWIT署名
importsNo有効にするホストインポート
wasiNoWASI設定(args、env、mounts)
limitsNo実行制限
`process.wasm`は`function.wasm`と設定構造体を共有するため、`pool`ブロックはスキーマで受け入れられますが無視されます — プロセスは関数プールではなくプロセスホスト下で動作します。

meta.commandでWASMプロセスを名前付きコマンドとして登録します:

- name: greet
kind: process.wasm
meta:
command:
name: greet
short: Greet someone via WASM
fs: myns:wasm_binaries
path: /component.wasm
hash: sha256:...
method: greet

以下で実行します:

Terminal window
wippy run greet

利用可能なコマンドを一覧表示します:

Terminal window
wippy run list
フィールド必須説明
nameYeswippy run <name>で使用するコマンド名
shortNowippy run listに表示される短い説明

CLIコマンドが動作するにはterminal.hostprocess.hostが必要です。

WASMプロセスはInit/Step/Closeライフサイクルモデルに従います:

  1. Init - モジュールがインスタンス化され、入力引数がキャプチャされます
  2. Step - 実行が進みます。非同期モジュールの場合、スケジューラがyield/resumeサイクルを駆動します。同期モジュールの場合、実行は単一ステップで完了します。
  3. Close - インスタンスリソースが解放されます

WASMプロセスをスポーンし、完了を監視します:

local process = require("process")
local time = require("time")
-- Spawn with monitoring
local pid, err = process.spawn_monitored(
"myns:compute_worker", -- entry ID
"myns:processes", -- process group
6, 7 -- arguments passed to the WASM function
)
if err then
error("spawn failed: " .. tostring(err))
end
-- Wait for the process to complete
local events = process.events()
local event = events:receive()
if event and event.kind == process.event.EXIT then
local result = event.result.value -- return value from the WASM function
end

WASIインターフェースをインポートするWASMプロセスは非同期操作を実行できます。スケジューラはI/O中にプロセスをサスペンドし、操作完了時に再開します:

- name: http_worker
kind: process.wasm
fs: myns:wasm_binaries
path: /http_worker.wasm
hash: sha256:...
method: run
imports:
- wasi:io
- wasi:cli
- wasi:http
wasi:
env:
- id: myns:api_url
name: API_URL
required: true

yield/resumeメカニズムはWASMコードに対して透過的です。ゲスト内の標準的なブロッキング呼び出し(スリープ、読み取り、書き込み、HTTPリクエスト)は自動的にディスパッチャにyieldします。

プロセスは関数と同じWASI設定をサポートします:

- name: file_processor
kind: process.wasm
fs: myns:wasm_binaries
path: /processor.wasm
hash: sha256:...
method: process
imports:
- wasi:cli
- wasi:io
- wasi:clocks
- wasi:filesystem
wasi:
args: ["--input", "/data/input.csv"]
cwd: "/app"
env:
- id: myns:output_format
name: OUTPUT_FORMAT
mounts:
- fs: myns:input_data
guest: /data
read_only: true
- fs: myns:output_dir
guest: /output