๋ถ๋ฅ ์ ์ฒด๋ณด๊ธฐ(62)
-
Race Condition
Race Condition(๊ฒฝ์ ์ํ)๋, ๋ ์ด์์ ํ๋ก์ธ์ค ํน์ ์ค๋ ๋๊ฐ ๊ณต์ ๋ ์์์ ์ ๊ทผํ ๋ ์๋ก ๊ฒฝ์ํ๋ ๊ฒ์ฒ๋ผ ๋์๋ค๋ฐ์ ์ผ๋ก ์ ๊ทผ์ ์ํํ์ฌ ๋์์ฑ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ ์ํ๋ฅผ ๊ฒฝ์ ์ํ๋ผ๊ณ ํ๋ค. ์ด๋ฌํ ์ํ์์๋ ์ฌ๋ฌ ํ๋ก์ธ์ค๊ฐ ํน์ ์์์ ๋์์ ์ ๊ทผํ๊ฒ ๋๋๋ฐ ์ ๊ทผ ์์๊ฐ ๋งค๋ฒ ์กฐ๊ธ์ฉ ๋ฌ๋ผ์ง ์ ์๊ธฐ ๋๋ฌธ์ ๊ทธ์ ๋ฐ๋ฅธ ์๋ฃ ์ฒ๋ฆฌ์ ์ผ๊ด์ฑ์ด ๋จ์ด์ง๊ฒ ๋๋ค. ํด๊ฒฐ์ฑ ๊ณต์ ์์์ ๋ํ ๋์์ฑ ๋ฌธ์ ๋ฅผ ์ํด ์ํธ ๋ฐฐ์ (Mutual Exclusion) ๋ก์ง์ ์ฌ์ฉํ ์ ์๋ค. ์ด์์ ๊ฐ์ฅ ๋ง์ด ์ฐ์ด๋ ๊ฒ์ด Mutex, Semaphore ๊ฐ์ ๋ฐฉ๋ฒ๋ค์ธ๋ฐ, ์ด๋ค์ ๋ํ ์ค๋ช ์ ๋ค์ ๋งํฌ์์ ๋์ฒดํ๋๋ก ํ๊ฒ ๋ค. 2023.03.26 - [CS/CS ์คํฐ๋] - Mutex & Semaphore Mute..
2023.03.30 -
Mutex & Semaphore
๊ณต์ ์์ ์ ๊ทผ์ ๋ํด ๋์์ฑ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ฒ์ ๊ฐ๋ฐ์์ ์ ์ฅ์์ ์ค์ํ ํ๋์ด๋ค. ๊ฐ๋ น, ๋ฉํฐ ์ค๋ ๋ ํ๊ฒฝ์์ ์คํ์ ์ ์ธํ ๋ค๋ฅธ ๋ฉ๋ชจ๋ฆฌ์ ์ ๊ทผํ๋ ์ํฉ์ด๋ ๋ค์ค ํ๋ก์ธ์ค ํ๊ฒฝ์์ IPC๋ฅผ ์ํด ๊ณต์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ์ํฉ ๋ฑ์ด ์กด์ฌํ ์ ์๋ค. ์ด ๋ ํ์ฉํ ์ ์๋ ์คํฌ์ด ๋ฐ๋ก Mutex์ Semaphore์ด๋ค. Mutex ๋ฎคํ ์ค๋ Mutual Exclusion์ ์ค์๋ง๋ก ์ํธ ๋ฐฐ์ ๋ผ๋ ๋ป์ ๊ฐ๋๋ค. ๋ฎคํ ์ค๋ ํน์ ๊ณต์ ์์์ ๋ํด ๋จ ํ๋์ ์ฃผ์ฒด๋ง์ด ์ ๊ทผํ ์ ์๊ฒ ๋ง๋๋ ๋ฝ์ ๊ฐ๋ ์ด๋ค. ๋ฎคํ ์ค์ ๊ตฌํ์ ํฌ๊ฒ lock()๊ณผ unlock()์ผ๋ก ์ด๋ฃจ์ด ์ง๋๋ฐ, (wait()์ release()๋ก๋ ํํํ๋๋ฐ ์ฌ๊ธฐ์๋ lock()๊ณผ unlock()์ด ๋ ์ง๊ด์ ์ธ ์๋ฉ์ด๋ผ๊ณ ํ๋จ) lock()์ ํน์ ..
2023.03.26 -
CPU ์ค์ผ์ค๋ง
ํ๋์ ๋ค์ด์ PC์ ์ปดํจํ ์ฑ๋ฅ์ด ์ฆ๊ฐํ๊ณ , ์ด์ ๋ฐ๋ผ ๋์์ ์ฌ๋ฌ ํ๋ก๊ทธ๋จ์ ๋์ ์ฌ์ฉํ๋ ์ผ์ด ์ฆ๋ค. ์ด์์ฒด์ ์ ์ฅ์์๋ ๋์๋ค๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๊ณ ์๋ ํ๋ก์ธ์ค๋ค์ ๋ํด, ๋น๋ก CPU ์ฝ์ด๊ฐ ํ๋๋ผ์ ํ ๋ฒ์ ํ๋์ ํ๋ก์ธ์ค ๋ง์ ์คํ์ํฌ ์ ์๋ ์ํฉ์ผ์ง๋ผ๋, ์ฌ์ฉ์๋ก ํ์ฌ๊ธ ๋ชจ๋ ํ๋ก์ธ์ค๋ค์ด ๋ณ๋ ฌ์ ์ผ๋ก ์คํ๋๊ณ ์๋ค๋ ์ฐฉ๊ฐ์ ๋ถ๋ฌ์ผ์ผํฌ ์ ์์ด์ผ ํ๋ค. ๋ง์ฝ PC๋ฅผ ํตํด ์์ ์ ๋ค์ผ๋ฉด์ ์น์ํ์ ํ๋ ์ํฉ์์, ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์คํ๋๋ ๋์ ๊ฒ์์ฐฝ์ ํ์ดํ์ด ์๋๋ค๋ฉด ์ด๋ ์ด์์ฒด์ ์ ์ญํ ์ ์ ๋๋ก ์ํํ๊ณ ์์ง ์์ ๊ฒ์ด๋ค. ์ด๋ฅผ ์ํด, ์ด์์ฒด์ ๋ CPU๋ฅผ ํ ๋นํ ์์ ๋ค์ ๋ํ ์ค์ผ์ค๋ง์ ์ํํ๋ค. ๋จ์ํ ์ค์ผ์ค๋ง์ ์ํ์ํค๋ ๋จ๊ณ๋ฅผ ๋์ด, ์ด๋ฅผ ์ ์ํํ ์ ์์ด์ผ ํ๋ค. ์ค์ผ์ค๋ง์ ํ๊ฐ ํญ..
2023.03.25 -
Interface vs Abstract Class (in Typescript)
๊ฐ์ฒด์งํฅ ํจ๋ฌ๋ค์์์ ๋นผ๋์ ์ ์๋ ๊ฐ๋ ์ด ๋ฐ๋ก ์ธํฐํ์ด์ค์ ์ถ์ ํด๋์ค์ด๋ค. ์ด๋ค์ ๋ชจ๋ ๊ฐ์๋ฅผ ์์ํ ๊ตฌํ์ฒด๊ฐ ์ํํ ํ๋์ ์ถ์ํํ์ฌ ๋ช ์ํ๊ณ ์ด๋ฅผ ๊ตฌ์ฒดํํ ๊ฒ์ ๊ฐ์ ํ๋ค. ๋ํ ์ด๋ค๋ง์ผ๋ก๋ ์ธ์คํด์ค๋ฅผ ์์ฑํ ์ ์๋ค๋ ๊ณตํต์ ๋ ์กด์ฌํ๋ค. ๊ฒฐ๊ตญ ํน์ ์ธ์คํด์ค๊ฐ ์ถ์ํ์ ์์กดํ๊ฒ ํ์ฌ, ๊ฒฐ๋ก ์ ์ผ๋ก ๊ฐ์ฒด์งํฅ ํจ๋ฌ๋ค์์ ๋คํ์ฑ, ์บก์ํ๋ผ๋ ๊ณตํต์ ๋ชฉํ๋ฅผ ์์ฝ๊ฒ ๋ฌ์ฑํ๊ฒ ํด ์ค๋ค. ๋ค๋ง ์ด๋ค ๊ฐ์๋ ๋ถ๋ช ํ ์ฐจ์ด๊ฐ ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ์์๋ฅผ ํตํด ์ ๋ฆฌํ๊ณ ์ ํ๋ค. Interface vs Abstract Class ์์๋ฅผ ์ํด ์ UML์ ๊ด๊ณ๋ฅผ ๊ตฌํํ๊ฒ ๋ค. Interface ์์ // ์ธํฐํ์ด์ค interface IHuman { spendOneDay(): void; work(): string; } // ..
2023.03.19 -
Interface in TS (vs Java)
ํ์ ์คํฌ๋ฆฝํธ์ ์ธํฐํ์ด์ค์ ์๋ฐ์ ์ธํฐํ์ด์ค๋ ์๋ก ์ ์ฌํ ๊ตฌ์กฐ์ ๋ชฉํ๋ฅผ ๊ฐ์ง๋ง, ์ด์ฉ ๋ฐฉ์๊ณผ ๋๋ถ์ด ์ธ์ด์ ์ฐจ์ด์์ ์ค๋ ์๋ ๋ฐฉ์์์ ์ฐจ์ด๊ฐ ์กด์ฌํ์ฌ ์ด๋ฅผ ์ ๋ฆฌํ๊ณ ์ ํ๋ค. Interface๋? ์ธํฐํ์ด์ค๋ ๊ฐ์ฒด์งํฅ ํจ๋ฌ๋ค์์์ ๋ก์ง์ ๊ตฌ์ฑํ ๋ ์ถ์ํ์ ์์กดํ ์ ์๊ฒ ํด์ฃผ์ด ๊ฒฐ๊ณผ์ ์ผ๋ก ์บก์ํ, ๋คํ์ฑ์ ๋ฌ์ฑํ๊ธฐ ์ฝ๊ฒ ํด์ฃผ๋ ๋๊ตฌ์ด๋ค. ๊ตฌ์ฒด์ ์ผ๋ก, ์ธํฐํ์ด์ค๋ ์ด๋ฅผ ๊ตฌ์ฒดํํ ๊ฐ์ฒด๊ฐ ๊ฐ์ ธ์ผ ํ ๋ฉ์๋(ํ๋)์ ํ์ ์ ๋ณด๋ฅผ ๋ช ์ํ๋ ์ญํ ์ ํ๋ค. ์ค์ ๊ตฌํ์ ํฌํจ์ํค์ง ์์ผ๋ฉฐ, ์ฝ๋ ์์์๋ ์ค์ ๊ตฌํ์ฒด๋ฅผ ์ง์ ์์กดํ๋ ๊ฒ์ด ์๋ ์ถ์ํ ์ธํฐํ์ด์ค๋ฅผ ์์กดํ๊ฒ ๋ก์ง์ ์์ฑํ์ฌ ์์กดํ๋ ๊ฐ์ฒด๋ก ํ์ฌ๊ธ ํด๋น ๊ฐ์ฒด์ ์ธ๋ถ ๊ตฌํ์ ์์ง ๋ชปํด๋ ํ๋ ฅ์ด ๊ฐ๋ฅํ๋๋ก ๋๋๋ค.(์บก์ํ) ์ธํฐํ์ด์ค์ ์ธํฐํ์ด์ค์ ๊ตฌํ์ฒด์..
2023.03.19 -
IPC(Interprocess Communication)
ํ๋ก์ธ์ค๋ค์ด ์๋ก์ ๋ํด ์์ ํ ๋ ๋ฆฝ๋ ํ๊ฒฝ์ ๊ฐ๋๋ค๋ ๊ฒ์ ์ด์์ฒด์ ๋ฅผ ๊ณต๋ถํด ๋ณด์๋ค๋ฉด ์๋ช ํ๋ค. ํ์ง๋ง ๊ฒฝ์ฐ์ ๋ฐ๋ผ ํ๋ก์ธ์ค ๊ฐ ํต์ ์ ํ์ฉํ๊ณ ์ถ์ ์ ์๋ค. ์๋ฅผ ๋ค์ด ๋ก์ปฌ์์ ๊ตฌ๋ ์ค์ธ ์น ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ์์ MySql DB์ ์ ๊ทผํ๋ ์ํฉ์ ๊ฐ์ ํด ๋ณด์. ํ๋ก์ธ์ค๊ฐ ์์ ํ ๋ ๋ฆฝํ๋ค๋ ๊ฐ์ ํ์๋, ์๋ก ์ ๊ทผ์ด ๋ถ๊ฐ๋ฅํ๋ค. ํ์ง๋ง ์ค์ ๋ก๋ ์๋ฒ์์ DB๋ก ์ ๊ทผ์ด ์ ์ด๋ฃจ์ด์ง๋ค. ์ด๋ฅผ ๊ฐ๋ฅํ๊ฒ ํด์ฃผ๋ ๊ฒ์ด ๋ฐ๋ก IPC์ด๋ค. IPC์ ์ข ๋ฅ IPC์ ์ข ๋ฅ๋ ์๋์ ๊ฐ๋ค. Pipe Named Pipe Message Queue Shared Memory Socket Communication Pipe ํ์ดํ๋ ๋ ํ๋ก์ธ์ค ๊ฐ ๋จ๋ฐฉํฅ ํต์ ์ ์ํํ ๋ ์ด์ฉ๋๋ค. ํ์ดํ๋ ์ผ์ข ์ ํ์ผ๋ก ๊ด๋ฆฌ๋๋๋ฐ, ์ด๋ ์ต๋ช ์ผ..
2023.03.19