๐ป[C#]IPC ํต์ ํ๊ตฌ (Shared Memory, Named PIPE)-1
ํ๋ฒํ๊ฒ ํ์ฌ ๋ค๋๋ ์ด๋ ๋ Soultion์ ์๋ก ๋ง๋ค์ด์ผ ํ๋๋ฐ ๊ทธ ๋ฐฉ์์ IPC๋ก ์งํํ๋ค๊ณ ํ๋ค.(์ด๊ธฐ ๊ตฌํ) ๊ธฐ์ด์ ์ธ ๊ฐ๋ ์ ์๊ณ ์์ด์ผ ๋ ๊ฒ ๊ฐ์. ๊ณต๋ถ๋ ํ ๊ฒธโฆ ํฌ์คํ ์ ํด๋ณด์!
๐ IPC๋ ?
IPC(Inter Processs Communication) ๋ผ๊ณ ํ๋๋ฐ ๋จผ์ ์๋ ๊ทธ๋๋ก ํด์ํด๋ณด๋ฉด Process ๊ฐ ์ํธ์์ฉ ? ๋จ์ํ ์๊ฐํด ๋ณด๋ฉด ์~ Process ๊ฐ์ ํต์ ์ ๋งํ๋ ๊ฑฐ๊ตฌ๋ !!
๊ทผ๋ฐ ์ฌ๊ธฐ์ ์ IPC๋ฅผ ์จ์ผ ํ๋๊ฐ ??
์ฌ๊ธฐ์ ๋ํด์ ์ง์ ๊ฒช๊ณ ๋๋๊ฒ ์๋ค.
๐ค๊ทธ๋ผ ์ IPC ์จ์ผ ํ ๊น??
ํ์ฌ์ ๋ค์ด์ค๊ณ ๋์ ๊ธํ๊ฒ ํฌ์
์ด ๋์ด์ ํ ํ๋ก์ ํธ์ ์ฐธ์ฌ ํ๊ฒ ๋์๋ค. ๊ทธ ํ๋ก๊ทธ๋จ์๋ ํ์ฌ๊น์ง ๊ณ์ ์งํ ์ค์ด๋ฉฐ ์ง๊ธ์ ํ ์๋ฃจ์
ํ์ผ์ ์ฝ๋ ์๋ฅผ ๋ณด๋ 12๋ง์ด ๋์ด๊ฐ๋คโฆ. ๊ทธ๋ฌ๋ค ๋ณด๋ ์ ์ง ๋ณด์ ํ๋๋ฐ ์์ด ์ด๋ ค์์ด ์์๋ค. ๋๊ตฐ๋ค๋ Revit Addin ๊ฐ๋ฐ ์ด๋ค ๋ณด๋ Debug์ ํ ๋ ค๋ฉด Reivit ํ๋ก๊ทธ๋จ์ ์ผ์ผ ํ๊ณ ์์ ์ฌํญ์ด ์์๋ ๋ง๋ค ๋ฐ๋ก ์์ ์ด ์๋๋ฉด Revit ์ ๋ค์ ๊ป๋ค ์ผ์ผ ํ๋ ์ผ์ด ๋ฐ์ํ๋ค. (๊ฒ์์ผ๋ก ๋ณด์๋ฉด ๋ก๊ทธ ๋ผ์ดํธ ๋๋์ด๋๊น?โฆ)
๊ทธ๋ฌ๋ค ๋ณด๋ ๋ณธ ์ฝ๋์์ ํฐ ํ์์ ๊ธฐ๋ฅ๋ณ๋ก ์ชผ๊ฐ๊ณ ๊ฐ๊ธฐ๋ค๋ฅธ ํ๋ก์ธ์ค๋ก ์คํํด ํต์ ์ ํ๋ค๋ฉด Revit์ ๋์ง ์๊ณ ๋ ๊ณ์ ์์ ํ ์ ์์ผ๋ฉฐ ์ ์ง๋ณด์ ํ๋๋ฐ์๋ ๋์์ด ๋ ๊ฒ์ด๋ค !!
์์ฝ
- ์ฐ์ฐ ์๋ ํฅ์
- ๋ชจ๋ํ (๊ธฐ๋ฅ ๋ถ๋ฆฌ)
- ํธ๋ฆฌ์ฑ(์ ์ง๋ณด์)
๐ IPC์ ์ข ๋ฅ
Shared Memory
- ์๋ก ๋ค๋ฅธ ํ๋ก์ธ์ค ๊ฐ ์ผ๋ถ ์ฃผ์ ๊ณต๊ฐ์ ๊ณต์ ํ๊ฒ ํจ
- ์ค๊ฐ์ ์์ด ๊ณง๋ฐ๋ก ๋ฉ๋ชจ๋ฆฌ์ ์ ๊ทผ ํ ์ ์์ด์ IPC ์ค์ ๊ฐ์ฅ ๋น ๋ฅด๊ฒ ๋์ํจ
- ์๋ก ๋ค๋ฅธ ํ๋ก์ธ์ค๋ค์ด ๊ณต์ ์์์ ์ ๊ทผํ ๋ ๋๊ธฐํ ๋ฌธ์ ๋ฐ์ ๊ฐ๋ฅ
Soket
- ํ๋ก์ธ์ค๋ค ์ฌ์ด์ ํต์ ์ ๊ฐ๋ฅํ๊ฒ ํ๋ค.
- ์๋ฒ/ํด๋ผ์ด์ธํธ ํ๊ฒฝ์ ๊ตฌ์ถํ๋๋ฐ ์ฉ์ด
- ๋ฒ์ฉ์ ์ธ IPC๋ก ์๋ฐฉํฅ ํต์ ๊ฐ๋ฅ
Message Queue
FIFO(First-In-First-Out)๋ฐฉ์์ผ๋ก ์๋ฃ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๋ ํต์ ์ค๋น- ๋ฐ์ดํฐ์ ๋ฒํธ๋ฅผ ๋ถ์ฌ ๋ค์์ ํ๋ก์ธ์ค๊ฐ ๋์์ ๋ฐ์ดํฐ ๋ค๋ฃธ
- ๋น๋๊ธฐ ๋ฐฉ์์ด๋ฉฐ ํ์ ๋ฃ์ด ํ์ฒ๋ฆฌ ๊ฐ๋ฅ
PIPE
- ๋ ๊ฐ์ ํ๋ก์ธ์ค๋ฅผ ์ฐ๊ฒฐํ๊ณ ํ๋์ ํ๋ก์ธ์ค๋ ๋ฐ์ดํฐ๋ฅผ ์ฐ๊ธฐ๋ง, ๋๋จธ์ง ์ฝ๊ธฐ๋ง ํจ
- ๋ถ๋ชจ ์์ ๊ฐ์ ๋จ ๋ฐํฅ ํต์ ์ผ๋ก ์์ฃผ ์ฌ์ฉํจ
- ๊ฐ๋จํ๊ฒ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ฉฐ ๋จ์ํ ๋ฐ์ดํฐ์ ์ ํฉ
Named PIPE
- ๋จ ๋ฐํฅ ํต์ ๊ตฌ์กฐ์ด๋ฉฐ ํ์ชฝ์์ ์ฐ๋ฉด ๋ค๋ฅธ ํ์ชฝ์์ ์ฝ์ ์ ์์
PIPE์ ์ฐจ์ด์ ์PIPE๋ ๋ถ๋ชจ ์์ ๊ฐ์ ์ฌ์ฉNamed PIPE๋ ์ ํ ๋ชจ๋ฅด๋ ์ํ์ ํ๋ก์ธ์ค๋ค ์ฌ์ด์์ ํต์ ํ ๊ฒฝ์ฐ ์ฌ์ฉ
์ฌ๊ธฐ์ ์ง์ ํด๋ณผ๊ฑด Shared Memory์ Named PIPE ๊ทธ ์ด์ ๋ Shared Memory๋ ๊ฐ์ฅ ๋น ๋ฅด๋ค๋ ์ฅ์ ์ด ์๊ณ ํต์ ๋ฐฉ์์ด ์๋ฐฉํฅ์ด๋ค. ๊ทธ ๋ค์ Named PIPE๋ ๋จ๋ฐฉํฅ์ผ๋ก Shared Memory์ ๋ค๋ฅด๊ฒ ์ด๋ค ์ฐจ์ด์ ์ด ์๋์ง ๊ถ๊ธํด ์ก๊ธฐ ๋๋ฌธ์ด๋ค.
๐ Shared Memory
- ์ด๋ฐ์์ผ๋ก ์ผ๋ถ ์ฃผ์ ๊ณต๊ฐ์ ๊ณต์ ํจ
- ํ๋ก์ธ์ค๊ฐ ์ปค๋์ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ์์ฒญ์ ํ๋ฉด ์ปค๋์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ ๋นํด์ฃผ๋ฉฐ ์ด๋ค ํ๋ก์ธ์ค๋ ์ ๊ทผ ๊ฐ๋ฅ
ํ Memory์ ์ฌ๋ฌ ๊ฐ์ Process๊ฐ ์ ๊ทผ ํ๊ธฐ์ Cache Coherence(์ผ๊ด์ฑ)์์ ๋ฌธ์ ๊ฐ ๋ฐ์ ๊ฐ์ ์์ญ์ ํ ์ฌ์ฉ์์ ๊ถํ์ ์ ์ฉํด Shared Memory ์์ญ์ ๋บด๋ด๋ฉด ๋ค๋ฅธ ์ฌ์ฉ์์ Memory ์ ๋ณด ๋ํ ๊ฐ๊ธฐ ๋๋ฌธ์ ๋์์ ๋ ์ฌ์ฉ์ ์ ๋ณด ๋บด์ฌ์ ์์
๐ Named PIPE
- ํ ํ๋ก์ธ์ค๊ฐ Writeํ ๋ ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ Write ํ์ง ๋ชปํ๋ฉฐ read๋ํ ๋ง์ฐฌ๊ฐ์ง์ด๋ค.
- read()์ write()๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก block mode๋ก ์๋๋๊ธฐ์ ํ๋ก์ธ์ค๊ฐ read ๋๊ธฐ์ค์ด๋ผ๋ฉด read๊ฐ ๋๋๊ธฐ์ ์๋ write๋ฅผ ํ ์ ์๋ค
๋ค์ ๊ฒ์๋ฌผ์์๋ Shared Memory์ NamePipe๋ฅผ ์ค์ C#์์ ์ค์ต์ ํด๋ด์ผ๊ฒ ๋คโฆ



