κΈ°μ‘΄ WebAssembly μ€λ λ μ μ μ wasm μ»΄νμΌλ νλ‘κ·Έλ¨μ΄ μ¬λ¬ μμ€ν
μ€λ λλ₯Ό νμ©ν μ μλλ‘ νλ λ° μ€μ μ λ‘λλ€. μ΄κ²μ CPU μ§μ½μ μΈ μμ
μ λ§€μ° μ μ©ν κΈ°λ₯μ
λλ€. κ·Έλ¬λ IO μ§μ½μ μ΄λ©° μμ€ν
μ€λ λλ³΄λ€ ν¨μ¬ κ°λ²Όμ΄ μ½λ£¨ν΄μΌλ‘ λ μ ν΄κ²°λλ λ§μ μ’
λ₯μ λ¬Έμ κ° μμ΅λλ€. μ΄λ―Έ λ©ν°μ€λ λ©μ μ§μνλ μΈμ΄μ μ΅κ·Όμ Rust async-waitλ₯Ό μΆκ°ν κ²μ΄ κ·Έλ¬ν νμμ±μ μ’μ μμ
λλ€. async-awaitμ λ¬Έμ λ μμ© νλ‘κ·Έλ¨ μ½λλ₯Ό μμ±νλ μμ ν λ€λ₯Έ λ°©λ²κ³Ό λ€λ₯Έ μ»΄νμΌ κΈ°μ μ΄ νμνλ€λ κ²μ
λλ€. λ€λ₯Έ ννΈμΌλ‘, Go μΈκΈ°μ μ£Όμ μ΄μ μ€ νλλ λ°νμμ μν΄ μ½λ£¨ν΄μΌλ‘ μ€νλλ λμ κ°λ°μμκ² μ€μ μ€λ λμ²λΌ 보μ΄λ κ³ λ£¨ν΄μ
λλ€.
WebAssemblyλ Go μ€λ λ© λͺ¨λΈμ μ΄μ μ wasmμΌλ‘ μ»΄νμΌν μ μλ κ±°μ λͺ¨λ λ€μ€ μ€λ λ μμ© νλ‘κ·Έλ¨μ μ 곡ν μ μλ κ³ μ ν μμΉμ μλ€κ³ μκ°ν©λλ€. μμ΄λμ΄λ μ»΄νμΌλ νλ‘κ·Έλ¨μ΄ λ
Ήμ μ€λ λλ₯Ό νμ©νκΈ° μν΄ λ³κ²½ν νμκ° μλ€λ κ²μ
λλ€. μ΄κ²μ΄ μ€ν λ°©λ²μ λν νΈμ€νΈ μ νμ΄ λ©λλ€.
WebAssemblyμ λ λ€λ₯Έ μ€μν κΈ°λ₯μ κ²°μ μ μ€νμ
λλ€. λ
Ήμ μ€λ λλ₯Ό μ¬μ©νλ©΄ λ€μ€ μ€λ λ λμμ λν κ²°μ μ μ€ν λͺ¨λλ₯Ό ꡬννλ κ²μ΄ κ°λ¨ν΄μΌ ν©λλ€.
κΈ°λ₯μ μ€νΈλ‘맨 μ΄λ¦μ _Wasmroutines_μ
λλ€.
https://github.com/WebAssembly/design/issues/126 λ° https://github.com/WebAssembly/design/issues/1252 μ κ°μ "λ€μ΄ν°λΈ wasm μ€λ λ"μ κ΄λ ¨λ λͺ κ°μ§ λ¬Έμ λ₯Ό μ°Ύμμ§λ§ λ€μκ³Ό κ°μ΅λλ€. wasmμ΄ κ²°κ΅ μ»μ μ μλ κ²μΌλ‘ κ°μ£Όλμ§λ§ μ΄ μμ μμ κ½€ μ΄λ‘ μ μ λλ€.
_λ¨μΌ μμ€ν μ€λ λ ꡬν_μ λΉκ΅μ μ μ λ Έλ ₯μΌλ‘ μνν μ μμΌλ©°(μ: μΌλ° μ ν λ©λͺ¨λ¦¬λ₯Ό μ¬μ©ν μ μμ) λ³λμ μ€κ³λ‘ κ°μ§ κ°μΉκ° μλ λ§μ κ°μΉ(μμ μμ΄ λ€μ€ μ€λ λ νλ‘κ·Έλ¨μ μ€ννλ κ²κ³Ό κ°μ)λ₯Ό μ 곡ν κ²μ΄λΌκ³ λ―Ώμ΅λλ€. μ μ.
μλ‘μ΄ WebAssembly κΈ°λ₯ μμ΄ WebAssemblyμμ μ€νμ μΌμ μ€μ§ λ° μ¬κ°νκ±°λ μ€νμ μ ννλ λ° μ¬μ©ν μ μλ μ½λ λ³ν λκ΅¬μΈ Asyncify μ κ΄μ¬μ΄ μμ μ μμ΅λλ€. μ΄ μ루μ μλ μ€λ²ν€λκ° μμΌλ©° λ³Έμ§μ μΌλ‘ μ¬κ° κ°λ₯ν μμΈμΈ λμ ν¨κ³Ό μ²λ¦¬κΈ°λ₯Ό μ¬μ©νμ¬ μ€ν μ νμ μν μλ‘μ΄ λ©μ»€λμ¦μ μ μν κ³νμ΄ μλ€κ³ μκ°ν©λλ€. μμΈ μ μμ μ΄λ¬ν λ―Έλ λ°©ν₯μ μΌλμ λκ³ μ€κ³λμμ΅λλ€.
@tlively κ°μ¬ν©λλ€. Asyncifyλ λ΄ λ¬Έμ μ λν λ©μ§ μμ ν΄κ²°μ± μ²λΌ 보μ λλ€. κ·Έ μμ νλ‘ν νμ μ λ§λ€λ €κ³ ν©λλ€. μ΄μμ μΌλ‘λ νΈμ€νΈκ° μ 곡νλ κΈ°λ₯λ§ μ¬μ©νμ¬ μμ μμ΄ λ€μ€ μ€λ λ WebAssembly νλ‘κ·Έλ¨μ μ€ννκ³ μΆμ΅λλ€.
@mfateev λλ λΉμ μ΄ μ³λ€κ³ μκ°ν©λλ€. μ½λ£¨ν΄μ μ§μνλ λ° μλΉν κ°μΉκ° μμ κ²μ λλ€. λμ ν¨κ³Όμ νλ μμν¬ λ΄μμ μμΈ μ²λ¦¬ λ° μ½λ£¨ν΄μ ν΅ν©νλ κ²μ λν μ¬μ λ Όμκ° μ΄λ―Έ μμμ΅λλ€. μ΄κ²μ μ΄μ μμΈ μ²λ¦¬ μ μμμ λ Όμ λμμΌλ©° @rossberg λ μλ‘μ΄ μμΈ μ²λ¦¬ μ μκ³Ό νΈνλλ μλ‘μ΄ λμμΈ μ¬κ³ λ₯Ό κ°μ§κ³ μλ€κ³ μκ°ν©λλ€.
@rossberg κ° κ³μν΄μ μ μλ λμμΈμ μ μνλ λΉλμ€κ° μμ΅λλ€(
μμ κ°μ¬ν©λλ€. "μ€ν μ€μμΉ"μ λ§μ μ¬μ© μ¬λ‘λ₯Ό κ°λ₯νκ² νλ λ§€μ° κ°λ ₯ν μΆμνμ λλ€. μ§μλκΈ°λ₯Ό κΈ°λν©λλ€.
λ΄ κ΄μ μ wasm λ°μ΄νΈμ½λμ μλ‘μ΄ κΈ°λ₯μ μ μνμ§ μλλ€λ μ μμ μ΄λ»κ² λ λ€λ¦ λλ€. atomic.wait/notify λ° κΈ°ν μμμ μμ μ μ¬μ©νλ λͺ¨λ λ€μ€ μ€λ λ μ½λμ λν΄ κ²°μ λ‘ μ μ€νμ μ 곡νλ λ°©λ²μ μ°Ύκ³ μμ΅λλ€. λ³Έμ§μ μΌλ‘ μ½λ£¨ν΄ κΈ°λ°μ΄μ§λ§ μΉ μ΄μ λΈλ¦¬ μμ© νλ‘κ·Έλ¨μ λν λ€μ€ μ€λ λ λ°νμμ²λΌ 보μ΄λ νΉμ νΈμ€νΈ μ€ν λͺ¨λλ₯Ό μ§μ ν μ μλ€κ³ μκ°ν©λλ€.
κ°μ₯ μ μ©ν λκΈ
@rossberg κ° κ³μν΄μ μ μλ λμμΈμ μ μνλ λΉλμ€κ° μμ΅λλ€(
https://youtu.be/pq-Pa2Fj4nE?t=3231