[Rust] tokio: Runtime

tokioλŠ” μ‚¬μš© 사둀에 따라 자체적으둜 λŸ°νƒ€μž„ ꡬ성을 μ‘°μ •ν•˜λŠ” 것이 κ°€λŠ₯ν•˜λ‹€.
λŸ°νƒ€μž„μ΄ μ–΄λ–€ μ‹μœΌλ‘œ λ™μž‘ν•˜λŠ”μ§€, μ–΄λ–»κ²Œ 쑰정을 ν•΄λ³Ό 수 μžˆλŠ”μ§€ λŒ€κ°• 정리해본닀.




λŸ°νƒ€μž„μ˜ ꡬ쑰

tokio의 λŸ°νƒ€μž„μ€ μ‰½κ²Œ λ§ν•˜λ©΄ μΌμ’…μ˜ μŠ€λ ˆλ“œν’€μ΄λΌκ³  ν•  수 μžˆλ‹€.
μŠ€λ ˆλ“œν’€μ„ μ •μ˜ν•΄λ†“κ³  κ·Έ μ˜μ—­ μ•ˆμ—μ„œ async ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜λ©΄, Future 기반의 μƒνƒœλ¨Έμ‹  μ½”λ“œλ‘œ μΉ˜ν™˜λ˜μ–΄μ„œ μŠ€λ ˆλ“œν’€μ„ 적절히 ν™œμš©ν•˜λ„λ‘ ν•˜λŠ” 것이닀.

보톡 tokio::main을 μ‚¬μš©ν•΄μ„œ μ΅œμƒμœ„ μŠ€νƒμ— κΈ€λ‘œλ²Œ λŸ°νƒ€μž„μ„ κΉ”κ³  μ“°λŠ” 방식이 λŒ€ν‘œμ μ΄λ‹€.

λŒ€λΆ€λΆ„μ€ 이 μ •λ„λ‘œλ§Œ μ“°λŠ” κ²½μš°κ°€ 많고, 또 λŒ€λΆ€λΆ„μ€ 이 μ •λ„λ‘œλ„ μΆ©λΆ„ν•  것이닀.

이건 사싀 λ‹€μŒ μ½”λ“œμ™€ λ™λ“±ν•˜λ‹€.

main μ•ˆμ—μ„œ 호좜된 ν•¨μˆ˜λ₯Ό μ „λΆ€ async ν΄λ‘œμ €λ‘œ λ¬Άκ³ , κ·Έκ±Έ async runtime λ‚΄μ—μ„œ μ‹€ν–‰ν•˜λŠ” 것이닀.

그리고 μ €κ±Έ ν•œλ²ˆ 더 까보면, 사싀은 이런 ꡬ쑰닀.

λ©€ν‹° μŠ€λ ˆλ“œ λͺ¨λ“œμ— λͺ¨λ“  κΈ°λ³ΈκΈ°λŠ₯을 ν™œμ„±ν™”ν•΄μ„œ λŸ°νƒ€μž„μ„ μƒμ„±ν•˜λŠ” 것이닀.




μ‹±κΈ€ μŠ€λ ˆλ“œ λͺ¨λ“œ

λ¦¬μ†ŒμŠ€λ₯Ό 적게 써야 ν•˜λŠ” ν™˜κ²½μ΄λΌλ©΄, μ‹±κΈ€μŠ€λ ˆλ“œ λͺ¨λ“œλ‘œ λ™μž‘ν•˜κ²Œ ν•  μˆ˜λ„ μžˆλ‹€.

이러면 μΆ”κ°€ μŠ€λ ˆλ“œλ₯Ό μ“°μ§€ μ•Šκ³ , ν˜„μž¬ ν”„λ‘œκ·Έλž¨μ˜ 메인 μŠ€λ ˆλ“œ λ‚΄μ—μ„œλ§Œ κ²½λŸ‰μŠ€λ ˆλ“œλ₯Ό λΆ„ν• ν•΄μ„œ μ“°λŠ” μ‹μœΌλ‘œ λ™μž‘ν•œλ‹€.




μŠ€λ ˆλ“œ 개수 쑰절

worker_threads ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λ©΄, μ›ν•˜λŠ” μŠ€λ ˆλ“œ 개수λ₯Ό μ§€μ •ν•  수 μžˆλ‹€.

λͺ…μ‹œμ μœΌλ‘œ μ„€μ •ν•˜μ§€ μ•ŠλŠ”λ‹€λ©΄ μ‹œμŠ€ν…œμ˜ μ½”μ–΄ 개수둜 μ„€μ •λœλ‹€.




λΆ€κ°€κΈ°λŠ₯λ“€

κΈ°λ³Έ 섀정값에 μžˆλŠ” enable_all ν•¨μˆ˜λŠ”, 이런 일을 ν•œλ‹€.

enable_ioλŠ” 말 κ·ΈλŒ€λ‘œ io와 κ΄€λ ¨λœ λ™μž‘μ„ ν™œμ„±ν™”ν•˜λŠ” ν”Œλž˜κ·Έλ‹€. λ‹Ήμ—°νžˆ 거의 ν•„μˆ˜λ‹€.
enable_time은 timer κ΄€λ ¨ κΈ°λŠ₯듀을 ν™œμ„±ν™”ν•˜λŠ” ν”Œλž˜κ·Έλ‹€. sleep 같은걸 κ±Έλ•Œλ„ ν•„μš”ν•˜κ³ , timeout κ±Έλ¦° taskλ₯Ό μ‚¬μš©ν•  λ•Œλ„ μ‚¬μš©λœλ‹€.




multi runtime

일반적인 μ‚¬μš©μ‚¬λ‘€λŠ” μ•„λ‹ˆκ² μ§€λ§Œ, μ—¬λŸ¬κ°œμ˜ λŸ°νƒ€μž„μ„ λ™μ‹œμ— κ΅¬μ„±ν•΄μ„œ μ‚¬μš©ν•˜κ³  싢을 μˆ˜λ„ μžˆλ‹€.
μ–΄λ–€ μ„œλΈŒν”„λ‘œμ„ΈμŠ€λ“€λ³„λ‘œ λ¦¬μ†ŒμŠ€λ₯Ό κ²©λ¦¬ν•˜κΈΈ μ›ν•œλ‹€κ±°λ‚˜, μ•„λ‹ˆλ©΄ 처리 속도에 μ˜λ„μ μΈ μ œν•œμ„ 두고 μ‹Άλ‹€κ±°λ‚˜.

일단, λŸ°νƒ€μž„μ„ μ€‘μ²©ν•˜λŠ” ν˜•νƒœλ‘œλŠ” λΆˆκ°€λŠ₯ν•˜λ‹€.
λŸ°νƒ€μž„ 내에 λ˜λ‹€λ₯Έ λŸ°νƒ€μž„μ„ ꡬ성할 κ²½μš°μ—λŠ” 였λ₯˜κ°€ λ°œμƒν•œλ‹€.

μ΄λŠ” μ˜λ„μ μΈ 섀계 μ œμ•½μ΄λ‹€.

ν•˜μ§€λ§Œ λŸ°νƒ€μž„μ„ λ³‘λ ¬λ‘œ μ‹€ν–‰ν•˜λŠ” κ²ƒμ—λŠ” λ¬Έμ œκ°€ μ—†λ‹€.

λŸ°νƒ€μž„ μ‹€ν–‰ ν•¨μˆ˜ μžμ²΄λŠ” blocking ν•¨μˆ˜λ‹ˆκΉŒ μŠ€λ ˆλ“œλ‘œ λΆ„λ¦¬ν•΄μ„œ μ‹€ν–‰μ‹œν‚€κΈ°λ§Œ ν•˜λ©΄ λœλ‹€.



μ°Έμ‘°
https://docs.rs/tokio/latest/tokio/runtime/index.html