[24.08.02] TIL - 044

post-thumbnail

🎧 0. 였늘의 μΆ”μ²œκ³‘

코루틴 μ–΄λ–»κ²Œ μ“°λŠ”μ§€ ν•˜λ‚˜λ„ λͺ¨λ₯΄κ² μ–΄...

πŸ“™ 1. 개인 곡뢀 - 코루틴

μ˜€λŠ˜μ€ 코루틴에 λŒ€ν•΄ κ³΅λΆ€ν–ˆμŠ΅λ‹ˆλ‹€.

좜처

μ €ν¬λŠ” μ‚΄λ©΄μ„œ ν•œ 번의 μˆœκ°„μ— ν•œ κ°€μ§€ 일만 ν•˜κ³  μ‚΄μ§€λŠ” μ•ŠμŠ΅λ‹ˆλ‹€.

μŒμ•…μ„ λ“€μœΌλ©° 코딩을 ν•˜κΈ°λ„ ν•˜κ³ ,

TVλ‚˜ ν•Έλ“œν°μ„ λ³΄λ©΄μ„œ λ°₯을 먹기도 ν•©λ‹ˆλ‹€.

그럼 μ™œ μ—¬λŸ¬ κ°€μ§€ 일을 λ™μ‹œμ— ν• κΉŒμš”? μ—¬λŸ¬ κ°€μ§€ μ΄μœ κ°€ μžˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€.

μŒμ•… λ“€μœΌλ©° μ½”λ”©ν•˜λŠ” 것은 집쀑λ ₯ ν–₯상이 이유일 수 있고,

TV, ν•Έλ“œν°μ„ λ³΄λ©΄μ„œ λ°₯을 λ¨ΉλŠ” μ΄μœ λŠ” ν‰μ†Œμ—” λ°”λΉ μ„œ λ°₯ 먹을 λ•Œ λ³΄λŠ” 것일 μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

ν•˜μ§€λ§Œ ν™•μ‹€ν•œ 건, λ™μ‹œμ— ν–‰λ™ν•˜λ©΄μ„œ μ–»λŠ” 이점이 있기 λ•Œλ¬Έμ΄λΌλŠ” κ²ƒμž…λ‹ˆλ‹€.

1-1. 동기와 비동기

그러면 ν”„λ‘œκ·Έλž¨μ—μ„  μ–΄λ–¨κΉŒμš”?

좜처

μœ„ 사진은 AMD 라이젠 μ‚¬μ˜ CPU μ‚¬μ–‘μž…λ‹ˆλ‹€. 무렀 84λ§Œμ›μ΄λ‚˜ ν•˜λŠ” λΉ„μ‹Ό CPUμΈλ°μš”.

사양을 λ³΄μ‹œλ©΄ μ½”μ–΄/μŠ€λ ˆλ“œ λΌλŠ” κ°œλ…μ΄ μžˆμŠ΅λ‹ˆλ‹€.

μ½”μ–΄λŠ” κ°„λ‹¨ν•˜κ²Œ λ§ν•΄μ„œ μ—¬λŸ¬ 일꾼이 μžˆλŠ” 것이고, μŠ€λ ˆλ“œλŠ” μ—¬λŸ¬ νŒ”μ΄ μžˆλŠ” κ²ƒμž…λ‹ˆλ‹€.

좜처

κ·ΈλŸ¬λ―€λ‘œ, 컴퓨터도, 컴퓨터 μ•ˆμ˜ ν”„λ‘œκ·Έλž¨λ„ μ €ν¬μ²˜λŸΌ ν•œ μˆœκ°„μ— μ—¬λŸ¬ 일을 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

이λ₯Ό 비동기(Asynchronous)라고 ν•©λ‹ˆλ‹€.

이와 λ°˜λŒ€λ˜λŠ” 동기(Synchronous)λΌλŠ” κ°œλ…λ„ μ‘΄μž¬ν•©λ‹ˆλ‹€.

즉, λ™κΈ°λŠ” 순차적으둜 μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” 것을, λΉ„λ™κΈ°λŠ” λ‹€λ₯Έ μž‘μ—…μ„ ν•˜λ©΄μ„œ λ™μ‹œμ— 또 ν•˜λ‚˜μ˜ μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

1-2. μ½”ν‹€λ¦°μ—μ„œμ˜ 비동기 ν”„λ‘œκ·Έλž˜λ°

μ½”ν‹€λ¦°μ˜ μž₯점 쀑 ν•˜λ‚˜λ₯Ό λ§ν•˜λΌκ³  ν•˜λ©΄, μ—­μ‹œ μ½”λ£¨ν‹΄μž…λ‹ˆλ‹€.

λ¬Όλ‘ , 저같은 μ£Όλ‹ˆμ–΄ 개발자 μž…μž₯에선 μ½”λ£¨ν‹΄μ˜ μ—„μ²­λ‚œ 양에 κΈ°κ²ν•˜κ³  λ°”λ‘œ 접을 μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

그럼 코루틴은 λ¬΄μ—‡μΌκΉŒμš”?

코루틴은 μ‹€ν–‰ 을 μΌμ‹œ μ€‘μ§€ν•˜κ³  μž¬κ°œν•  수 μžˆλŠ” 컴퓨터 ν”„λ‘œκ·Έλž¨ ꡬ성 μš”μ†Œλ‘œ, ν˜‘λ ₯적 λ©€ν‹°νƒœμŠ€ν‚Ήμ„ μœ„ν•œ μ„œλΈŒλ£¨ν‹΄μ„ μΌλ°˜ν™”ν•©λ‹ˆλ‹€. 코루틴은 ν˜‘λ ₯적 μž‘μ—… , μ˜ˆμ™Έ , 이벀트 루프 , 반볡자 , λ¬΄ν•œ λͺ©λ‘ 및 νŒŒμ΄ν”„ 와 같은 μΉœμˆ™ν•œ ν”„λ‘œκ·Έλž¨ ꡬ성 μš”μ†Œλ₯Ό κ΅¬ν˜„ν•˜λŠ” 데 μ ν•©ν•©λ‹ˆλ‹€ . - Wikipedia

무슨 μ†Œλ¦¬μΈμ§€ λœν†΅ λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€.

사싀 코루틴을 μ΄ν•΄ν•˜κΈ° 전에 κΈ°μ‘΄ μžλ°”μ—μ„œ μ‚¬μš©ν•˜λ˜ μ“°λ ˆλ“œ, 그리고 ν”„λ‘œμ„ΈμŠ€μ— λŒ€ν•΄ μ΄ν•΄ν•˜κ³  κ°€λŠ” 게 μ’‹μŠ΅λ‹ˆλ‹€.

저희가 ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰ν•˜λ©΄, ν•΄λ‹Ή ν”„λ‘œκ·Έλž¨μ΄ λ©”λͺ¨λ¦¬μ— μ μž¬λ©λ‹ˆλ‹€.

κ·Έ 쀑, μ΄λ ‡κ²Œ 적재된 ν”„λ‘œκ·Έλž¨μ„ ν”„λ‘œμ„ΈμŠ€λΌκ³  λΆ€λ¦…λ‹ˆλ‹€.

그리고 이 ν”„λ‘œμ„ΈμŠ€μ—μ„œ μž‘μ—… λ‹¨μœ„λ₯Ό λ‚˜λˆˆ 것을 μ“°λ ˆλ“œλΌκ³  λΆ€λ¦…λ‹ˆλ‹€.

μ½”ν‹€λ¦°μ—μ„œ ThreadλŠ” μž‘μ—… λ‹¨μœ„ ν•˜λ‚˜ν•˜λ‚˜λ₯Ό μ“°λ ˆλ“œμ— λ‹€λ£¨κ²Œ λ©λ‹ˆλ‹€.

μ“°λ ˆλ“œλŠ” 받은 μž‘μ—…λ“€μ„ μŠ€μΌ€μ€„λ§ ν•΄μ„œ ν”„λ‘œμ„ΈμŠ€μ— λ„˜κ²¨μ£Όκ³ , CPUκ°€ κ·Έ ν”„λ‘œμ„ΈμŠ€λ₯Ό μ²˜λ¦¬ν•΄μ€λ‹ˆλ‹€.

κ·Έλ ‡λ‹€λ©΄, λ‹€μ‹œ 본둠으둜 λŒμ•„μ™€μ„œ 코루틴은 λ¬΄μ—‡μΌκΉŒμš”?

코루틴은 μž‘μ—… ν•˜λ‚˜ν•˜λ‚˜λ₯Ό μ“°λ ˆλ“œμ— 닀루지 μ•Šκ³ , 코루틴 객체에 λ‹€λ£¨κ²Œ λ©λ‹ˆλ‹€.

이 코루틴 객체듀 λ˜ν•œ, ν•˜λ‚˜μ˜ 객체이기 λ•Œλ¬Έμ— μ½”ν‹€λ¦°μ—μ„œλŠ” JVM Heap에 μ μž¬λ©λ‹ˆλ‹€.

κ·Έ ν›„, μ“°λ ˆλ“œμ—μ„œ ν•˜λ‚˜, λ˜λŠ” μ—¬λŸ¬ 개의 코루틴 객체듀을 λ‹€λ£¨λŠ” μ‹μœΌλ‘œ μž‘λ™ν•©λ‹ˆλ‹€.

κ·Έλ ‡κΈ° λ•Œλ¬Έμ—, μ“°λ ˆλ“œμ—μ„œ ν•˜λ˜ λ³΅μž‘ν•˜κ³  μžμ›μ„ 많이 μž‘μ•„λ¨ΉλŠ” μž‘λ™ 방식을 μ“°μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

코루틴은 μ‹€ν–‰, 쀑단, 재개의 μž‘λ™ 방식을 κ°–κ³  μžˆμŠ΅λ‹ˆλ‹€.

μž‘λ™ 방식에 λŒ€ν•΄μ„œκΉŒμ§€ 적으면 λ„ˆλ¬΄ κΈΈμ–΄μ§€κ³  μž₯ν™©ν•΄μ§ˆ κ±° κ°™μ•„ 이건 λ‹€μŒμ£Ό TIL λ•Œ μž‘μ„±ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

결둠은 ! 코루틴은 비동기 ν”„λ‘œκ·Έλž˜λ°μ„ 가볍고, μ‰½κ²Œ μ“°κΈ° μœ„ν•œ λ°©λ²•μž…λ‹ˆλ‹€.

근데 μ΄λ ‡κ²Œ 써버리면 λ„ˆλ¬΄ λ‹Ήν™©μŠ€λŸ¬μš°λ‹ˆ, νŒ¨μŠ€νŠΈν‘Έλ“œμ μ„ μ˜ˆμ‹œλ₯Ό λ“€κ³  λ§ˆλ¬΄λ¦¬ν•˜κ² μŠ΅λ‹ˆλ‹€.

Thread 방식은 μ μ›λ§Œ μ‚¬μš©ν•˜λŠ” νŒ¨μŠ€νŠΈν‘Έλ“œμ μž…λ‹ˆλ‹€.
κ·Έλž˜μ„œ 점원을 μ‹œκΈ‰ 11000원을 μ£Όκ³  μ‚¬μš©ν•˜μ§€λ§Œ, μ²­μ†Œ/μΉ΄μš΄ν„°/μŒμ‹ 제쑰둜 λ‚˜λ‰˜μ–΄μ„œ
총 3λͺ…μ˜ 점원을 κ³ μš©ν•΄μ„œ μ“°κΈ° λ•Œλ¬Έμ— 인건비가 λΉ„μ‹Έκ²Œ λ‚˜κ°‘λ‹ˆλ‹€.

반면, Coroutine 방식은 점원 1λͺ…이 3개의 λ‘œλ΄‡λ“€μ„ μ‘°μ’…ν•˜λ©΄μ„œ 일을 ν•©λ‹ˆλ‹€.
이 λ‘œλ΄‡λ“€μ€ 되게 μ‹Έκ²Œ λ‚˜μ™€μ„œ μ‹œκΈ‰μœΌλ‘œ λ”°μ§€λ©΄ 1000원 정도 λ˜λŠ” λ‘œλ΄‡λ“€μž…λ‹ˆλ‹€.
덕뢄에 μ‹Έκ²Œ μ“°λ©΄μ„œ, ν•œ μ μ›λ§Œ κ³ μš©ν•΄λ„, μ²­μ†Œ, μΉ΄μš΄ν„°, μŒμ‹ μ œμ‘°κΉŒμ§€ λ‹€ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ—¬κΈ°μ„œ 점원은 μ“°λ ˆλ“œμ΄κ³ , λ‘œλ΄‡λ“€μ„ 코루틴이라고 보면 λ˜κ² μŠ΅λ‹ˆλ‹€.

μ‰½κ²Œ μ˜ˆμ‹œλ₯Ό λ“€κΈ° μœ„ν•œ μ„€λͺ…이기 λ•Œλ¬Έμ— κ°€λ³κ²Œ λŠλ‚Œλ§Œ 보고 κ°€λ©΄ 될 것 κ°™μŠ΅λ‹ˆλ‹€...

🎯 2. 끝

늦게 μž‘μ„±ν–ˆμ§€λ§Œ, 많이 곡뢀할 수 μžˆμ–΄μ„œ μ’‹μ•˜μŠ΅λ‹ˆλ‹€.

λ‚΄μš©μ— λŒ€ν•΄ 잘λͺ»λœ 뢀뢄이 μžˆλ‹€λ©΄ λŒ“κΈ€ λ‚¨κ²¨μ£Όμ„Έμš”...

끝.

μ°Έμ‘° λΈ”λ‘œκ·Έ

profile
μ—¬κΈ°λŠ” 곡뢀 기둝용 λΈ”λ‘œκ·Έ

0개의 λŒ“κΈ€