Python network modules๋ฅผ ๊ฒ์ํ๋ค ๋ณด๋, ๊ฐ ๊ฐ์ network module๋ค์ด coroutine์ ์ด์ฉํด์ ๋ง๋ค์๋ค๋ ๋ฌธ์ฅ์ ์์ฃผ ๋ณด๊ฒ ๋์๋ค.
๋๋ถ์ด Coroutine์ด Thread์ ๋น์ทํ๊ฒ ์คํ์ค๊ธฐ๋ฅผ ๊ฐ์ง๊ณ ์์ง๋ง ๋์์ด ๋ค๋ฅด๋ค๋ ๊ฒ๋,
๊ทธ๋์ ๋ ๊ฐ์ง์ ์ฐจ์ด์ ์ด ๋ฌด์์ธ์ง ์์๋ณด๊ธฐ๋ก ํ๋ค.
๋ ๊ฐ์ง์ ์ฐจ์ด์ ์ ์๊ธฐ์ ์ ์์๋ฌ์ผํ๋ ๊ฒ์ผ๋ก ๋์์ฑ๊ณผ ๋ณ๋ ฌ์ฑ์ ๋ํ ๋ด์ฉ์ด ์๋ค.
>> 2020/03/05 - [๐ Note] - ๋์์ฑ vs ๋ณ๋ ฌ์ฑ ( Concurrency vs Parallelism )
At stackoverflow
Coroutines are a form of sequential processing: only one is executing at any given time (just like subroutines AKA procedures AKA functions -- they just pass the baton among each other more fluidly).
์ฝ๋ฃจํด์ ์์ฐจ ์ฒ๋ฆฌ์ ํ ํํ์ด๋ค. ์ฃผ์ด์ง ์๊ฐ์ ์ค์ง ํ๋๋ง ์คํ๋๋ค.
+ ํ๊ฐ์ ์ค๋ ๋๋ก ์ฌ๋ฌ ์ค๋ ๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒ ์ฒ๋ผ ํ๋ด๋ด๊ธฐ ์ํด ๋ฑ์ฅํ ๊ฐ๋ .
Threads are (at least conceptually) a form of concurrent processing: multiple threads may be executing at any given time. (Traditionally, on single-CPU, single-core machines, that concurrency was simulated with some help from the OS -- nowadays, since so many machines are multi-CPU and/or multi-core, threads will de facto be executing simultaneously, not just "conceptually").
๊ฐ๋ ์ ์ผ๋ก๋ ๋์ ์ฒ๋ฆฌ์ ํํ์ด๋ค. ์ฃผ์ด์ง ์๊ฐ์ ๋น์ค ์ฐ๋ ๋๊ฐ ์คํ๋ ์ ์๋ค. ์๋ ์ฑ๊ธ CPU, ์ฑ๊ธ ์ฝ์ด ๋จธ์ ์์๋ OS์ ๋์์ ๋ฐ์ ๋์์ฑ ์๋ฎฌ๋ ์ด์ ์ ํ์๋๋ฐ ์์ฆ์ ๋ฉํฐ CPU ๋ฐ ๋ฉํฐ ์ฝ์ด์ด๊ธฐ ๋๋ฌธ์ ๋์์ ์คํ๋๋ค๊ณ ๋ณผ ์ ์๋ค.
Coroutine
C์ธ์ด ๋ฑ์์ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉํ๋ ํจ์๋ ์์ํ ๋ ์ง์ ํ๋ ์ง์ ์ด ํ๋ ์กด์ฌํ๊ณ ํจ์๊ฐ ๋ชจ๋ ์คํ๋๊ฑฐ๋, return ๊ตฌ๋ฌธ์ ์ํด ์ข ๋ฃ๋๋ ์ง์ ์ ์ค์ ํ ์์๋ค.
์ด๋ฌํ ํจ์๋ฅผ Subroutine( ์๋ธ๋ฃจํด )์ด๋ผ ๋ถ๋ฅด๋๋ฐ, ์ฝ๋ฃจํด์ ์ด๋ฅผ ๋ ์ผ๋ฐํํ ๊ฐ๋ ์ผ๋ก ์ง์ ํ๋ ์์ ๊น์ง ์ฌ๋ฌ ๊ฐ๋ฅผ ๊ฐ์ง ์ ์๋ ํจ์๋ฅผ ์๋ฏธํ๋ค. ๊ฐ๋ ์ ์ผ๋ก๋ง ๋ณธ๋ค๋ฉด ์๋ธ๋ฃจํด์ ํ ์ข ๋ฅ๋ผ๊ณ ๋ณผ ์ ์๊ฒ ๋ค.
C#, JavaScript, Python ๋ฑ์ด ์ ๊ณตํ๋ Generator๊ฐ ์ฌ์ค ์ฝ๋ฃจํด์ ํ ํํ์ด๋ค.
caller๊ฐ ํจ์๋ฅผ callํ๊ณ , ํจ์๊ฐ caller์๊ฒ ๊ฐ์ returnํ๋ฉด์ ์ข ๋ฃํ๋ ๊ฒ์ ๋ํด returnํ๋ ๋์ suspend(ํน์ yield)ํ๋ฉด caller๊ฐ ๋์ค์ resumeํ์ฌ ์ค๋จ๋ ์ง์ ๋ถํฐ ์คํ์ ์ด์ด๊ฐ ์ ์๋ค.
์ฆ, ์ฝ๋ฃจํด ํจ์๊ฐ ํธ์ถ๋๋ฉด ์ฝ๋ฃจํด ํจ์ ๋ด๋ถ์ฝ๋๊ฐ ์คํ๋๊ณ ์๋ค๊ฐ suspend ํน์ yield์ ์ํด ํจ์๊ฐ ํธ์ถ๋ ๋ถ๋ถ์ ๊ฐ์ด ๋ฐํ๋๊ณ ์ดํ ๋ค์ ์ฝ๋ฃจํด ํจ์๋ฅผ ํธ์ถํ๊ฒ ๋๋ฉด ์ฝ๋ฃจํด ํจ์ ๋ด๋ถ์ suspend ํน์ yield ์ง์ ์ดํ ์ฝ๋๋ก ๋์์์ ์คํ์ ํ๊ฒ ๋๋ค๋ ๋ง์ด๋ค.
๋ถ๋ถ์ ์ผ๋ก, ๊ทธ๋ฆฌ๊ณ ํน์ ํ ์ํฉ์ด ๋ง์ ๋จ์ด์ก์ ๋ ์คํ๋๋ ํจ์.
- ์ฅ์
1. ์ฑ๋ฅ
์ผ๋ฐ์ ์ผ๋ก ๊ฒ์์์ ์ฝ๋ฃจํด์ ์ฌ์ฉํ์ง ์๋๋ค๋ฉด ๋งค ํ๋ ์๋ง๋ค Update๊ตฌ๋ฌธ์์ ๋์์ ํ์ธํด์ผํ๋ ์ํฉ์ด ๋ฐ์ํ๋ค.
ํ์ง๋ง ์ฝ๋ฃจํด์ ์ฌ์ฉํ๋ฉด ์ฝ๋ฃจํด์ด ์ง์ ํ ์๊ฐ์ด ํ์ ์๋์ผ๋ก ํ์ธ๋๋ค.
์ด๋ฌํ ์ ๋๋ฌธ์ ํนํ ๋ชจ๋ฐ์ผ ๊ธฐ๊ธฐ์์ ์ฝ๋ฃจํด์ ํ์ฉ์ ์ฑ๋ฅ ํฅ์์ ํฐ ์ํฅ์ ๋ฏธ์น๋ค.
2. ๊ฐ๋ ์ฑ
์ฝ๋ ๊ฐ๋ ์ฑ์ด ์ข์์ง๋ค. ์ด๊ฑด ์จ๋ณด๋ฉด ์ ๊ฒ ์ด๋ค.
- ํน์ฑ
* ํน์ ์์ ์ ๋จ๊ณ์ ์ผ๋ก ๋ฐ์ํ๊ฒ ํ๋ค.
* ์๊ฐ ํ๋ฆ์ ๋ฐ๋ผ ๋ฐ์ํ๋ ๋ฃจํด์ ์์ฑํ ์ ์๋ค.
* ๋ค๋ฅธ ์ฐ์ฐ์ด ์๋ฃ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๋ ๋ฃจํด์ ์์ฑํ ์ ์๋ค.
* ๋น๋๊ธฐ๊ฐ ์๋๋ค. = ๋์์ ๋ฐ์ํ์ง ์๋๋ค.
Thread
ํ์ฌ์ ์์ ์ค๋ ๋์ ๊ฒฝ์ฐ๋ ๋ฉํฐ์ฝ์ด๋ฅผ ๋์ด์ many ์ฝ์ด ์๋๋ก ์ ํ ๋๊ณ ์๊ธฐ ๋๋ฌธ์ ์ด ์์๋ค์ ์ถฉ๋ถํ ๋ชจ๋ ์ด์ฉํ๊ธฐ ์ํด ๋ณ๋ ฌ ํ๋ก๊ทธ๋๋ฐ์ ํ๊ฒ ๋๋๋ฐ ์ด ๋ณ๋ ฌ ์ฒ๋ฆฌ์ ํต์ฌ๋๊ตฌ๊ฐ ์ค๋ ๋ ์ด๋ค.
๋ฉํฐํ๋ก์ธ์ค ๊ธฐ๊ณ์์, ์ค๋ ๋๋ ์ค์ ๋ค๋ฅธ ์ค๋ ๋์ ํจ๊ป ๋์์ ์ฝ๋๊ฐ ์คํ ๋ ์ ์๋ค. ํ์ง๋ง ์ฌ๋ฌ ์ค๋ ๋๋ฅผ ์ฌ์ฉํ๋ ๋ฉํฐ์ค๋ ๋ ํ๋ก๊ทธ๋๋ฐ์ ์ฝ๋๋ฅผ ์ดํดํ๊ธฐ ๋ณต์กํ๊ฒ ๋ง๋ ๋ค.
๋ค๋ฅธ ์ค๋ ๋๊ฐ ํน์ ๋ถ๋ถ์ ์ฝ๊ณ ์๋ ๋์์ ๊ทธ๊ฒ์ ๋ณ๊ฒฝํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
์ด ๋๋ฌธ์ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ์์ญ์ ๋ง๋ค์ง ์๊ฑฐ๋ ๊ณต์ ๋ ์์์ ์ฝ๊ฑฐ๋ ๋ณ๊ฒฝ์์ผ์ผ ๋๋ ๊ฒฝ์ฐ๋ผ๋ฉด, ๊ณต์ ๋ ์์์ผ๋ก ๋ถํฐ ๋ค๋ฅธ ์ค๋ ๋๋ฅผ ์ ๊ถ๋ฒ๋ฆผ์ผ๋ก์จ( Lock ) ๋ฌธ์ ์ํฉ์ด ๋ฐ์ํ์ง ์๋๋ก ํ๊ณ ์๋ค.
์ค๋ ๋๋ฅผ ์ด์ฉํ๋ฉด ํ๋์ ํ๋ก๊ทธ๋จ์์ ํ ๋ฒ์ ํ๋์ ์ผ์ ์ฒ๋ฆฌํ๋ ๊ฒ์ด ์๋๋ผ ๋์์ ๋ง์ ์ผ์ ์ฒ๋ฆฌํ ์ ์๋ค.
- ํน์ฑ
* ๋น๋๊ธฐ ์ด๋ค. = ๋์์ ๋ฐ์ํ๋ค.
Thanks for
- Difference between a "coroutine" and a "thread"?
- ์ฝ๋ฃจํด์ด๋? ์ฌ์ฉ๋ฒ์?
- [Unity] ์ฝ๋ฃจํด(Coroutine)์ ๊ธฐ๋ณธ ๊ฐ๋ ๋ฐ ํ์ฉ
- ์ฝ๋ฃจํด ์๊ฐ
- Update, Coroutine, Thread ์ค ๋ ๋์๋ฐฉ๋ฒ์ด ๋ฌด์์ธ์ง ์๊ณ ์ถ์ต๋๋ค.
- ์ฝ๋ฃจํด(Coroutine)++
- ์ฐ๋ ๋: ๋๊ธฐ์ฑ๊ณผ ๋น๋๊ธฐ์ฑ
- ์ฐ๋ ๋ ๋
- ์ค๋ ๋ ๋?
- Thread(์ฐ๋ ๋)๋ ๋ฌด์์ธ๊ฐ?
'๐ Note' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Pycharm * ์ฌ์ฉ์ ๋ฐ์ค, ๋ฌผ๊ฒฐ ํ์ (0) | 2020.03.09 |
---|---|
Codecov? ๋ญ๋ ๋.. ์ฝ๋.. ์ปค๋ฒ๋ฆฌ์ง...๋ ๋...OTL (0) | 2020.03.09 |
TCP/IP * 2. ํ๋กํ ์ฝ ์ฒด๊ณ์ ์์ผ ํ์ ( TCP, UDP ) (0) | 2020.03.05 |
โ Solved * [VMware] Workstation โCannot connect the virtual device sata0:1/ide1:0 ... (2) | 2020.03.05 |
โ Solved * VMware Workstation cannot create ~/.vmware directory ... (0) | 2020.03.05 |