Design: μ™€μ¦˜λ£¨ν‹΄

에 λ§Œλ“  2019λ…„ 12μ›” 30일  Β·  5μ½”λ©˜νŠΈ  Β·  좜처: WebAssembly/design

κΈ°μ‘΄ 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이 κ²°κ΅­ 얻을 수 μžˆλŠ” κ²ƒμœΌλ‘œ κ°„μ£Όλ˜μ§€λ§Œ 이 μ‹œμ μ—μ„œ κ½€ μ΄λ‘ μ μž…λ‹ˆλ‹€.

_단일 μ‹œμŠ€ν…œ μŠ€λ ˆλ“œ κ΅¬ν˜„_은 비ꡐ적 적은 λ…Έλ ₯으둜 μˆ˜ν–‰ν•  수 있으며(예: 일반 μ„ ν˜• λ©”λͺ¨λ¦¬λ₯Ό μ‚¬μš©ν•  수 있음) λ³„λ„μ˜ μ„€κ³„λ‘œ κ°€μ§ˆ κ°€μΉ˜κ°€ μžˆλŠ” λ§Žμ€ κ°€μΉ˜(μˆ˜μ • 없이 닀쀑 μŠ€λ ˆλ“œ ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰ν•˜λŠ” 것과 같은)λ₯Ό μ œκ³΅ν•  것이라고 λ―ΏμŠ΅λ‹ˆλ‹€. μ œμ•ˆ.

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

@rossberg κ°€ κ³„μ†ν•΄μ„œ μ œμ•ˆλœ λ””μžμΈμ„ μ œμ‹œν•˜λŠ” λΉ„λ””μ˜€κ°€ μžˆμŠ΅λ‹ˆλ‹€(

https://youtu.be/pq-Pa2Fj4nE?t=3231

λͺ¨λ“  5 λŒ“κΈ€

μƒˆλ‘œμš΄ WebAssembly κΈ°λŠ₯ 없이 WebAssemblyμ—μ„œ 싀행을 μΌμ‹œ 쀑지 및 μž¬κ°œν•˜κ±°λ‚˜ μŠ€νƒμ„ μ „ν™˜ν•˜λŠ” 데 μ‚¬μš©ν•  수 μžˆλŠ” μ½”λ“œ λ³€ν™˜ 도ꡬ인 Asyncify 에 관심이 μžˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€. 이 μ†”λ£¨μ…˜μ—λŠ” μ˜€λ²„ν—€λ“œκ°€ 있으며 본질적으둜 재개 κ°€λŠ₯ν•œ μ˜ˆμ™ΈμΈ λŒ€μˆ˜ 효과 처리기λ₯Ό μ‚¬μš©ν•˜μ—¬ μŠ€νƒ μ „ν™˜μ„ μœ„ν•œ μƒˆλ‘œμš΄ λ©”μ»€λ‹ˆμ¦˜μ„ μ œμ•ˆν•  κ³„νšμ΄ μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. μ˜ˆμ™Έ μ œμ•ˆμ€ μ΄λŸ¬ν•œ 미래 λ°©ν–₯을 염두에 두고 μ„€κ³„λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

@tlively κ°μ‚¬ν•©λ‹ˆλ‹€. AsyncifyλŠ” λ‚΄ λ¬Έμ œμ— λŒ€ν•œ 멋진 μž„μ‹œ ν•΄κ²°μ±…μ²˜λŸΌ λ³΄μž…λ‹ˆλ‹€. κ·Έ μœ„μ— ν”„λ‘œν† νƒ€μž…μ„ λ§Œλ“€λ €κ³  ν•©λ‹ˆλ‹€. μ΄μƒμ μœΌλ‘œλŠ” ν˜ΈμŠ€νŠΈκ°€ μ œκ³΅ν•˜λŠ” κΈ°λŠ₯만 μ‚¬μš©ν•˜μ—¬ μˆ˜μ • 없이 닀쀑 μŠ€λ ˆλ“œ WebAssembly ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰ν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€.

@mfateev λ‚˜λŠ” 당신이 μ˜³λ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. 코루틴을 μ§€μ›ν•˜λŠ” 데 μƒλ‹Ήν•œ κ°€μΉ˜κ°€ μžˆμ„ κ²ƒμž…λ‹ˆλ‹€. λŒ€μˆ˜ 효과의 ν”„λ ˆμž„μ›Œν¬ λ‚΄μ—μ„œ μ˜ˆμ™Έ 처리 및 코루틴을 ν†΅ν•©ν•˜λŠ” 것에 λŒ€ν•œ 사전 λ…Όμ˜κ°€ 이미 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. 이것은 이전 μ˜ˆμ™Έ 처리 μ œμ•ˆμ—μ„œ λ…Όμ˜ λ˜μ—ˆμœΌλ©° @rossberg λŠ” μƒˆλ‘œμš΄ μ˜ˆμ™Έ 처리 μ œμ•ˆκ³Ό ν˜Έν™˜λ˜λŠ” μƒˆλ‘œμš΄ λ””μžμΈ 사고λ₯Ό 가지고 μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

@rossberg κ°€ κ³„μ†ν•΄μ„œ μ œμ•ˆλœ λ””μžμΈμ„ μ œμ‹œν•˜λŠ” λΉ„λ””μ˜€κ°€ μžˆμŠ΅λ‹ˆλ‹€(

https://youtu.be/pq-Pa2Fj4nE?t=3231

μ˜μƒ κ°μ‚¬ν•©λ‹ˆλ‹€. "μŠ€νƒ μŠ€μœ„μΉ­"은 λ§Žμ€ μ‚¬μš© 사둀λ₯Ό κ°€λŠ₯ν•˜κ²Œ ν•˜λŠ” 맀우 κ°•λ ₯ν•œ μΆ”μƒν™”μž…λ‹ˆλ‹€. μ§€μ›λ˜κΈ°λ₯Ό κΈ°λŒ€ν•©λ‹ˆλ‹€.

λ‚΄ 관점은 wasm λ°”μ΄νŠΈμ½”λ“œμ— μƒˆλ‘œμš΄ κΈ°λŠ₯을 μ œμ•ˆν•˜μ§€ μ•ŠλŠ”λ‹€λŠ” μ μ—μ„œ μ–΄λ–»κ²Œ λ“  λ‹€λ¦…λ‹ˆλ‹€. atomic.wait/notify 및 기타 μ›μžμ  μž‘μ—…μ„ μ‚¬μš©ν•˜λŠ” λͺ¨λ“  닀쀑 μŠ€λ ˆλ“œ μ½”λ“œμ— λŒ€ν•΄ 결정둠적 싀행을 μ œκ³΅ν•˜λŠ” 방법을 μ°Ύκ³  μžˆμŠ΅λ‹ˆλ‹€. 본질적으둜 코루틴 κΈ°λ°˜μ΄μ§€λ§Œ μ›Ή μ–΄μ…ˆλΈ”λ¦¬ μ‘μš© ν”„λ‘œκ·Έλž¨μ— λŒ€ν•œ 닀쀑 μŠ€λ ˆλ“œ λŸ°νƒ€μž„μ²˜λŸΌ λ³΄μ΄λŠ” 특수 호슀트 μ‹€ν–‰ λͺ¨λ“œλ₯Ό 지정할 수 μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰