๐ก์ค๋ ๋์ ์ฝ๋ฃจํด์ ๋ํ์ฌ ๊ฐ๋จํ๊ฒ ์ ๋ฆฌํ์์ต๋๋ค.
๊ฐ์
- Thread์ Coroutine์ ๋ ๋ค ๋์์ฑ ์ฒ๋ฆฌ๋ฅผ ์ํ ๋ฐฉ๋ฒ์ด์ง๋ง, ์๋ก ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ์์ ์ ์ฒ๋ฆฌํฉ๋๋ค.
- ์๋๋ก์ด๋, ์๋ฒ ์ ํ๋ฆฌ์ผ์ด์ ๋๋ ๋ค์ํ ๋ณ๋ ฌ ์ฒ๋ฆฌ ํ๊ฒฝ์์ ์ค์ํ ์ญํ ์ ์ํํฉ๋๋ค.
- ์ด๋ ๋๊ธฐ & ๋น๋๊ธฐ, ๋์์ฑ & ๋ณ๋ ฌ์ฑ์ ๊ฐ๋ ๊ณผ ๋งค์ฐ ๋ฐ์ ํ๊ฒ ์ฐ๊ด๋์ด ์์ต๋๋ค.
๋๊ธฐ์ ๋น๋๊ธฐ(Thread & Handler)
Thread
- Thread๋ ์ด์์ฒด์ ์์ ๊ด๋ฆฌํ๋ ์์ ์คํ ๋จ์์ด๋ฉฐ, ๋ณ๋์ ํ๋ก์ธ์ค ์์์ ์คํํ์ฌ ๋์์ ์ฌ๋ฌ ์์ ์ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
- Thread๋ ๋ฉ๋ชจ๋ฆฌ์ ์์คํ ์์์ ๋ง์ด ์ฌ์ฉํ๋ฉฐ, ๊ฐ Task์ ํด๋นํ๋ ์คํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋น๋ฐ์ต๋๋ค.
- Thread ํ์ฉ์ผ๋ก ๋ฉํฐ ์ฝ์ด์์ ์ค์ ๋ก ๋ณ๋ ฌ ์์ ์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
์ด์์ฒด์ ์ ๋ฉํฐ์ค๋ ๋ฉ
- ์ค๋ ๋๋ ์ด์์ฒด์ ๊ฐ ๊ด๋ฆฌํ๊ณ ์ค์ผ์ฅด๋งํ๋ฉฐ, CPU์์ ๊ฐ ์ค๋ ๋๊ฐ ์คํ๋ฉ๋๋ค.
- ์ฌ๋ฌ ์์
์ ๋์์ ์ํํด์ผ ํ ๋ OS๋ ์ด๋ค ์ฐ๋ ๋ ์์
์ ๋จผ์ ์ํํ ์ง, ์ด๋ค ์ฐ๋ ๋๋ฅผ ๋ ๋ง์ด ์ํํด์ผ ํจ์จ์ ์ธ ์ค์ผ์ฅด๋ง์ ์งํํฉ๋๋ค.
- ์ด๋ ์ ์ ์ค์ผ์ฅด๋ง(Preempting Scheduling)์ด๋ผ๊ณ ๋ ํฉ๋๋ค.
Context Switching
- ์ฌ๋ฌ ์ค๋ ๋๊ฐ ๋์์ ์คํ๋ ๋, ์ค๋ ๋ ๊ฐ์ ์ ํ์ด ์์์ ๋ง์ด ์ฌ์ฉํ๊ณ ํฐ ๋น์ฉ์ ์๋ชจํฉ๋๋ค.
- ์ด๋ ๋ณ๋ ฌ์ฑ์ด ์๋ ๋์์ฑ ๋ณด์ฅ ์๋จ์ด๋ฉฐ, ์ด์์ฒด์ ์ปค๋์ ํตํด ๋์ํฉ๋๋ค.
Coroutine
- Coroutine์ ๊ฒฝ๋ ์ค๋ ๋๋ก ๋ถ๋ฆฌ๋ฉฐ, ์ฝ๋์ ๋น๋๊ธฐ ์คํ์ ์ฝ๊ฒ ์ฒ๋ฆฌํ ์ ์๋๋ก ๋๋ ๋์์ฑ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ ๋๋ค.
- ์ค๋ ๋์ ๋ฌ๋ฆฌ ๋น๋๊ธฐ์ ์ผ๋ก ์คํ๋๋ฉฐ, ํ๋ ฅ์ ์ผ๋ก ์ค์ผ์ฅด๋ง๋ฉ๋๋ค.
- Coroutine์ ์ค์ ๋ก ๋ณ๋ ฌ์ ์ฒ๋ฆฌ๋ฅผ ์ง์ํ์ง ์์ผ๋ฉฐ, ์ด๋ ๋จ์ผ ์ฝ์ด์์ ํ๋ ฅ์ ๋ฉํฐํ์คํน์ ํตํด ๊ตฌํ๋ฉ๋๋ค.
Non-blocking
- ์ฝ๋ฃจํด์ Non-blocking ๋ฐฉ์์ผ๋ก ์๋ํ๋ฉฐ, ์ค๋ ๋๋ฅผ ์ฐจ๋จํ์ง ์๊ณ ๋ ๋น๋๊ธฐ ์์ ์ ์ฒ๋ฆฌํฉ๋๋ค.
Suspension
- ์ฝ๋ฃจํด์ ํ์ํ ๋ ์ค๋จ ๋์๋ค๊ฐ ๋ค์ ์ฌ๊ฐ๋๋ฉฐ, ์ด๋ก ์ธํด ์ปจํ ์คํธ ์ค์์นญ ๋น์ฉ์ด ๋งค์ฐ ์ ์ต๋๋ค.
- Programmer Switching (No - Context Switching)์ ์ง์ํ๋ฉฐ ํ๋ก๊ทธ๋๋จธ์ ์ฝ๋๋ก Switching ์ง์ ์ ์ง์ ํ ์ ์์ต๋๋ค.
- No - Context Switching ํน์ฑ ๋๋ถ์ Light - weight Thread๋ก ๋ถ๋ฆฝ๋๋ค.
Coroutine Object
- ์ฌ๋ฌ ์์ ๊ฐ๊ฐ์ Object๋ฅผ ํ ๋นํ๋ฉฐ, JVM Heap์ ์ ์ฌ๋์ด ์ฌ์ฉ๋ฉ๋๋ค.
Task 1์ ์ํํ๋ค๊ฐ ๋น๋๊ธฐ ์์ ์ผ๋ก Task 2๊ฐ ๋ฐ์ํ๋๋ผ๋ ๊ฐ์ Thread์์ 2๊ฐ์ง ์์ ์ ๋์์ ์ํํ ์ ์๊ณ , ๋ค์์ Thread์์ ๋ค์์ Coroutine์ ํ์ฉํ๋ ๋ฐฉ์์ผ๋ก ๋ณ๋ ฌ + ๋์ ํ๋ก๊ทธ๋๋ฐ๋ ์ง์์ด ๊ฐ๋ฅํฉ๋๋ค.
์ ๋ฆฌ
- Thread๋ ์ด์์ฒด์ ์์ ๊ด๋ฆฌ๋๋ฉฐ Context Switching์ ํ์ฉํ ๋์์ฑ๊ณผ ๋ฉํฐ ์ฝ์ด๋ฅผ ํ์ฉํ ๋ณ๋ ฌ์ฑ์ ์ ๊ณตํ๋ ๋๊ตฌ์ ๋๋ค.
- ํ์ง๋ง Thread๋ ๋ฌด๊ฒ๊ณ ๋น์ฉ์ด ๋ง์ด ์๋ชจ๋๋ฉฐ ๋๊ธฐํ ๋ฌธ์ ๋ฅผ ์ผ์ผํฌ ์ ์์ต๋๋ค.
- Coroutine์ Thread์ ๋์์ด ๋ ์ ์์ผ๋ฉฐ, Thread๋ฅผ ๋จ์ผ ์ฝ์ด์์ ์๊ฒ ์ชผ๊ฐ์ด ์ฌ์ฉํ๊ธฐ ์ํ ๊ฐ๋ ์ ๋๋ค.
- ์์ ์ ๋จ์๋ฅผ Object๋ก ์ถ์ํ์ฌ ๋ฉ๋ชจ๋ฆฌ, Context Switching ๋น์ฉ ๋ญ๋น๋ฅผ ํ ํ์๊ฐ ์์ต๋๋ค.
- ์ฝ๋ฃจํด์ ํ์ฉํ๋ฉด ํ๋ก๊ทธ๋๋จธ์ ๋ชฉ์ ๊ณผ ์๋๋๋ก ํจ์จ์ ์ธ ๋์์ฑ ํ๋ก๊ทธ๋๋ฐ์ ๋ณด์ฅํฉ๋๋ค.