1 minute read

๐Ÿ“– IOCP Server

Input/Output Completion Port ์˜ ์•ฝ์ž์ด๋‹ค.
windowํ™˜๊ฒฝ์—์„œ ์ œ์ผ ํ”ํžˆ ์“ฐ์ด๋Š” ๋…ผ๋ธ”๋กœํ‚น ํ”„๋กœ์„ธ์Šค์œผ๋กœ์จ, ์ตœ์†Œํ•œ์˜ ์Šค๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Port์™€ ๊ด€๋ จ๋œ ์ž…์ถœ๋ ฅ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ธฐ๋ฒ•์ด๋‹ค.
IOCP์˜ ๋ชฉ์ ์€ ๋™์‹œ์— ์ˆ˜ํ–‰๋˜๋Š” ์Šค๋ ˆ๋“œ์˜ ์ƒํ•œ์„ ์„ค์ •ํ•ด์„œ CPU์˜ ์ž์›์„ ์ตœ๋Œ€ํ•œ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
Overlapped I/O๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ์ด๋ฅผ ๊ฐ์ง€ํ•˜์—ฌ ์‚ฌ์šฉ์ž์—๊ฒŒ ์•Œ๋ ค์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.
epoll์€ I/O๊ฐ€ ๊ฐ€๋Šฅํ•˜๋ฉด ์ด๋ฅผ ๊ฐ์ง€ํ•˜์—ฌ ์‚ฌ์šฉ์ž์—๊ฒŒ ์•Œ๋ ค์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.


๐Ÿ“– ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๋ชจ๋ธ

๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๋ชจ๋ธ์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›๋Š” ๋ฐฉ์‹์„ ์˜๋ฏธํ•˜๋Š”๋ฐ, ํฌ๊ฒŒ ๋™๊ธฐ์‹ ์ฒ˜๋ฆฌ์™€ ๋น„๋™๊ธฐ์‹ ์ฒ˜๋ฆฌ๊ฐ€ ์กด์žฌํ•œ๋‹ค.
๋™๊ธฐ & ๋น„๋™๊ธฐ๋Š” ๋ฆฌํ„ด๊ฐ’์„ ํ™•์ธ ์œ ๋ฌด๋กœ ๊ตฌ๋ถ„ํ•œ๋‹ค.

๐Ÿ„ ๋™๊ธฐ(Synchronous)

๋™๊ธฐ(Synchronous) ๋ฐฉ์‹์€ ๋ฐ์ดํ„ฐ์˜ ์š”์ฒญ๊ณผ ๊ฒฐ๊ณผ๊ฐ€ ํ•œ์ž๋ฆฌ์—์„œ ๋™์‹œ์— ์ผ์–ด๋‚˜๋Š” ๊ฒƒ์œผ๋กœ, ๋ฐ์ดํ„ฐ ์š”์ฒญ ํ›„ ์‹œ๊ฐ„์ด ์–ผ๋งˆ๋‚˜ ๊ฑธ๋ฆฌ๋“ ์ง€ ์š”์ฒญํ•œ ์„œ๋ฒ„๋‚˜ ํ”„๋กœ์„ธ์Šค๋Š” ์ •์ง€ํ•œ ์ฑ„ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋‹ค๋ฆฐ๋‹ค.
๋ณดํ†ต ๋Œ€๋ถ€๋ถ„์˜ ํ•จ์ˆ˜๋‚˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์œ„ ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•˜๋ฉฐ ์„ค๊ณ„๊ฐ€ ๋งค์šฐ ์ง๊ด€์ ์ด๊ณ , ๊ฐ„๋‹จํ•˜๋‹ค.
ํ•˜์ง€๋งŒ, ๊ฒฐ๊ณผ๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ๊นŒ์ง€ ๋ฌดํ•œ์ •์œผ๋กœ ๋Œ€๊ธฐํ•˜๋Š” ๋ฐฉ์‹์ด๋ฏ€๋กœ ์š”์ฒญ๋ฐ›์€ ์„œ๋ฒ„๋‚˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์˜ค๋ฅ˜๊ฐ€ ์ƒ๊ธฐ๊ฑฐ๋‚˜ ํ†ต์‹ ์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ›์ง€ ๋ชปํ•˜๋ฉด ํฐ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.


๐Ÿ„ ๋น„๋™๊ธฐ(Asynchronous)

๋น„๋™๊ธฐ(Asynchronous) ๋ฐฉ์‹์€ ๋ฐ์ดํ„ฐ์˜ ์š”์ฒญ๊ณผ ๊ฒฐ๊ณผ๊ฐ€ ๋™์‹œ์— ์ผ์–ด๋‚˜์ง€ ์•Š๋Š” ๊ฒƒ์œผ๋กœ, ๋ฐ์ดํ„ฐ ์š”์ฒญ ํ›„ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋ฉด ์ •์ง€ํ•œ ์ฑ„ ๋Œ€๊ธฐํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ํ†ตํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ›๋Š”๋‹ค.
์š”์ฒญ์— ๋”ฐ๋ผ์„œ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š์•„๋„ ๋˜์ง€๋งŒ, ๋™๊ธฐ ๋ฐฉ์‹์— ๋น„ํ•ด์„œ ์„ค๊ณ„๊ฐ€ ๋ณต์žกํ•˜๋‹ค๋Š” ๋‹จ์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.


๐Ÿ“– ๋ธ”๋กœํ‚น vs ๋…ผ๋ธ”๋กœํ‚น

๋ธ”๋กœํ‚น์€ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ๋‚˜ I/O์—์„œ ํ•จ์ˆ˜ A์—์„œ B๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ, ์ œ์–ด๊ถŒ์„ ๋„˜๊ธฐ๋ƒ ์•ˆ๋„˜๊ธฐ๋ƒ๊ฐ€ ์ค‘์š”ํ•˜๋‹ค.
๋ธ”๋กœํ‚น & ๋…ผ๋ธ”๋กœํ‚น์€ ์ œ์–ด๊ถŒ์˜ ์ฃผ์ฒด๋ฅผ ๋„˜๊ธฐ๋Š๋ƒ ์•ˆ ๋„˜๊ธฐ๋Š๋ƒ๋กœ ๊ตฌ๋ถ„

๐Ÿ„ ๋ธ”๋กœํ‚น

๋ธ”๋กœํ‚น์€ ํ•จ์ˆ˜ A์—์„œ Bํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ, ์ œ์–ด๊ถŒ์„ ํ•จ์ˆ˜ A๊ฐ€ ํ˜ธ์ถœํ•œ ํ•จ์ˆ˜ B์— ๋„˜๊ฒจ์ค€๋‹ค.
๋”ฐ๋ผ์„œ, ํ•จ์ˆ˜ A๋Š” ์ œ์–ด๊ถŒ์„ ๋Œ๋ ค๋ฐ›๊ธฐ ์ „๊นŒ์ง€ ๋ฉˆ์ถฐ์žˆ๊ฒŒ ๋œ๋‹ค.


๐Ÿ„ ๋…ผ๋ธ”๋กœํ‚น

๋ธ”๋กœํ‚น์€ ํ•จ์ˆ˜ A์—์„œ Bํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ, ์ œ์–ด๊ถŒ์„ ํ•จ์ˆ˜ A๊ฐ€ ํ˜ธ์ถœํ•œ ํ•จ์ˆ˜ B์— ๋„˜๊ฒจ์ฃผ์ง€๋Š” ์•Š๋Š”๋‹ค. ๋”ฐ๋ผ์„œ, ํ•จ์ˆ˜ A๋Š” ์ œ์–ด๊ถŒ์„ ๋Œ๋ ค๋ฐ›๊ธฐ ์ „๊นŒ์ง€ ๋ฉˆ์ถฐ์žˆ์ง€ ์•Š๊ณ  ์ฝ”๋“œ๋ฅผ ๊ณ„์† ์‹คํ–‰ํ•œ๋‹ค.

image


๐Ÿ“– Main Thread/ Worker Thread

  • ์ž‘์—…์ž ์Šค๋ ˆ๋“œ (Worker Thread)
  • ๋ฉ”์ธ ์Šค๋ ˆ๋“œ (Main Thread)

ํ”„๋กœ์„ธ์Šค๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ํ”„๋กœ์„ธ์Šค ํ•˜๋‚˜ ์œ„์— ์—ฌ๋Ÿฌ ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ๊ฐ€ ๋Œ๊ณ  ์žˆ๋‹ค.
์ด๋•Œ, ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋˜์ง€๋งŒ, UI๋ฅผ ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ๋กœ ๋ณ€๊ฒฝ๋˜๋ฉด ํ™”๋ฉด์ด ์ถœ๋ ฅ๋˜์–ด์•ผ ํ•˜๋Š” ์‹œ๊ฐ„์— ์ •์ง€์ƒํƒœ๋กœ ๋Œ์•„๊ฐ€๊ฒŒ ๋œ๋‹ค.
๋”ฐ๋ผ์„œ, UI๋ฅผ ๋‹ค๋ฅด๋Š” ์Šค๋ ˆ๋“œ๋Š” ์˜ค์ง Main(UI) ์Šค๋ ˆ๋“œ์—์„œ๋งŒ ๊ฐ€๋Šฅํ•ด์•ผ๋งŒ ํ•œ๋‹ค.
์ž‘์—…์ž ์Šค๋ ˆ๋“œ๋Š” ๋ฉ”์ธ์Šค๋ ˆ๋“œ๋ฅผ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ๋ชจ๋“  ์Šค๋ ˆ๋“œ๋ฅผ ์ž‘์—…์ž ์Šค๋ ˆ๋“œ๋ผ ํ•œ๋‹ค.


๐Ÿ“– Overlapped

์†Œ์ผ“์€ ๊ธฐ๋ณธ์ ์œผ๋กœ blocking ๋ฐฉ์‹์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.
-> ์Šค๋ ˆ๋“œ์—์„œ ๋„คํŠธ์›Œํฌ ์ˆ˜์‹ ์„ ํ•˜๋Š” ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ํ•˜๋ฉด ์ˆ˜์‹ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์ƒ๊ธธ ๋•Œ๊นŒ์ง€ ๋ธ”๋กœํ‚น์ด ๋ฐœ์ƒํ•œ๋‹ค.

Overlapped I/O๋Š” I/O์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋ฅผ Device Driver์— ๊ถŒํ•œ์„ ๋„˜๊น€์œผ๋กœ์„œ ๋ณ„๋„์˜ ์Šค๋ ˆ๋“œ ์—†์ด ๋น„๋™๊ธฐ๋กœ ๋‘˜ ์ด์ƒ์˜ ๋ฐ์ดํ„ฐ ์ „์†ก์„ ์ค‘์ฒฉ์‹œํ‚ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

https://sanghun219.tistory.com/104

๐Ÿ„



๊ฐœ์ธ ๊ณต๋ถ€ ๊ธฐ๋ก์šฉ ๋ธ”๋กœ๊ทธ์ž…๋‹ˆ๋‹ค.
ํ‹€๋ฆฌ๊ฑฐ๋‚˜ ์˜ค๋ฅ˜๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ ์ œ๋ณดํ•ด์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.๐Ÿ˜