๐Ÿ—ฃ๏ธ ์‹ ์ž… ์ธํ„ฐ๋ทฐ/๋„คํŠธ์›Œํฌ

์‹ ์ž… ๊ฐœ๋ฐœ์ž ๊ธฐ์ˆ ๋ฉด์ ‘ ์‹ค์ „ ๊ธฐ์ถœ : IOCP ๋ž€?

์ซ€๋ƒ  2024. 1. 2. 20:35

๋ฉด์ ‘๊ด€ : IOCP ์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด ์ฃผ์‹œ๊ฒ ์–ด์š”?

 

๋‚˜: ๋จผ์ €, IOCP์˜ ๋ชฉ์ ์€ ๋™์‹œ์— ์ˆ˜ํ–‰๋˜๋Š” ์Šค๋ ˆ๋“œ์˜ ์ƒํ•œ์„ ์„ค์ •ํ•ด์„œ CPU์˜ ์ž์›์„ ์ตœ๋Œ€ํ•œ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

๋‚˜: IOCP๋Š” Overlapped I/O๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด, ์ด๋ฅผ ๊ฐ์ง€ํ•ด์„œ ์‚ฌ์šฉ์ž์—๊ฒŒ ์•Œ๋ ค์ฃผ๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

 

๋ฉด์ ‘๊ด€ : Overlapped I/O๊ฐ€ ๋ญ”๊ฐ€์š”?

 

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

 

๋ฉด์ ‘๊ด€ : Overlapped I/O์™€ Nonblock Socket์˜ ์ฐจ์ด์ ์ด ๋ญ๋ผ๊ณ  ์ƒ๊ฐํ•˜์‹ญ๋‹ˆ๊นŒ?

 

๋‚˜ : Overlapped I/O๋Š” I/O ์ฒ˜๋ฆฌ๋ฅผ ๋น„๋™๊ธฐ๋กœ ์ฒ˜๋ฆฌํ•˜๋ฏ€๋กœ ๋ฐ์ดํ„ฐ ๋ณต์‚ฌ ๊ณผ์ •์—์„œ Block๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  I/O ์ฒ˜๋ฆฌ๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ํ•˜์ง€ ์•Š๊ณ  ๋””์Šคํฌ์— ๊ฐ€๊นŒ์šด ์ˆœ์„œ๋Œ€๋กœ ์ฒ˜๋ฆฌํ•˜๋ฉฐ Zero-Copy๋ฅผ ํ†ตํ•ด์„œ ์†Œ์ผ“ ๋ฒ„ํผ๋กœ์˜ ๋ณต์‚ฌ๋ฅผ ๊ฑด๋„ˆ๋›ฐ๊ณ  ์œ ์ € ๋ฒ„ํผ์— ๋ฐ”๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต์‚ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๋ฉด์ ‘๊ด€ : Zero-Copy๊ฐ€ ๋ญ”๊ฐ€์š”?

 

๋‚˜: Zero-Copy์˜ ๋ชฉ์ ์€ ๋””์Šคํฌ์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋„คํŠธ์›Œํฌ๋กœ ์ „์†กํ•  ๋•Œ ์ผ์–ด๋‚˜๋Š” ๋ฐ”์ดํŠธ ์นดํ”ผ๋ฅผ ์ตœ์†Œํ™” ํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ๋„คํŠธ์›Œํฌ๋ฅผ ์ด์šฉํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๋ ค๋ฉด ์ปค๋„ ์˜์—ญ์—์„œ ์‚ฌ์šฉ์ž ์˜์—ญ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด๋“ค์ธ ํ›„ ๋‹ค์‹œ ์‚ฌ์šฉ์ž ์˜์—ญ์—์„œ ์ปค๋„ ์˜์—ญ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต์‚ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ณผ์ •์€ ์‚ฌ์šฉ์ž ์˜์—ญ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์ž‘ํ•˜์ง€ ์•Š๊ณ  ๋ฐ”๋กœ ๋ณด๋‚ด๋„ ๋  ์‹œ์— ๋ถˆํ•„์š”ํ•œ ๊ณผ์ •์ด ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ์ปค๋„๊ณผ ์‚ฌ์šฉ์ž ์˜์—ญ์„ ๋„˜๋‚˜๋“œ๋Š” ๊ณผ์ •์„ ๊ฑฐ์น˜์ง€ ์•Š๊ณ  Read Buffer ์—์„œ Socket Buffer๋กœ์˜ ๋ณต์‚ฌ๋งŒ์„ ๊ฑฐ์ณ์„œ ์ปค๋„๊ณผ ์‚ฌ์šฉ์ž ์˜์—ญ๊ฐ„์˜ 2๋ฒˆ์˜ ๋ณต์‚ฌ ๊ณผ์ •์„ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๋ฉด์ ‘๊ด€ : ๊ณ„์† ์„ค๋ช…ํ•ด ๋ณด์„ธ์š”.

 

๋‚˜ : Overlapped ์˜ ์ž…์ถœ๋ ฅ์ด ์™„๋ฃŒ๋˜๋ฉด Completion Port๋ผ๊ณ  ํ•˜๋Š” Queue์— Completion Packet์ด ๊ธฐ๋ก๋˜๊ณ  ์Šค๋ ˆ๋“œ๊ฐ€ Queue๋ฅผ ํ™•์ธํ•˜์—ฌ Completion Packet์ด ์žˆ์œผ๋ฉด ์™„๋ฃŒ๋œ ๋‚ด์šฉ์„ ๋ฐ›์•„๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๋‚˜ : Select ๋ฐฉ์‹๊ณผ ๋น„๊ตํ•ด ๋ดค์„ ๋•Œ ์†Œ์ผ“ ํ•˜๋‚˜์— ์Šค๋ ˆ๋“œ ํ•˜๋‚˜๋ฅผ ํ• ๋‹นํ•ด ์ฃผ๋Š” ๊ฒƒ๊ณผ ๋น„๊ตํ•˜์—ฌ, ์†Œ์ˆ˜์˜ ์Šค๋ ˆ๋“œ๋กœ I/O์ฒ˜๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์—์„œ CPU์ž์›์„ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


์ฐธ๊ณ 

https://sanghun219.tistory.com/104

 

์ƒ์ƒ๋ฉด์ ‘ : IOCP๋ž€ ? (Socket)

๋ฉด์ ‘๊ด€ : IOCP์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด์ฃผ์‹œ๊ฒ ์–ด์š”? ๋‚˜ : ๋จผ์ €, IOCP์˜ ๋ชฉ์ ์€ ๋™์‹œ์— ์ˆ˜ํ–‰๋˜๋Š” ์Šค๋ ˆ๋“œ์˜ ์ƒํ•œ์„ ์„ค์ •ํ•ด์„œ CPU์˜ ์ž์›์„ ์ตœ๋Œ€ํ•œ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚˜ : IOCP๋Š” Overlapped I/O๊ฐ€

sanghun219.tistory.com

https://velog.io/@enamu/%EB%A9%B4%EC%A0%91-%EB%8C%80%EB%B9%84-CS-%EC%A7%88%EB%AC%B8-%EC%9A%94%EC%95%BD-3237

 

๋ฉด์ ‘ ๋Œ€๋น„ CS ์งˆ๋ฌธ ์š”์•ฝ (32~37)

Reference : https://its-fusion-blog.tistory.com/18 Reference : https://sanghun219.tistory.com/104IOCP๋ž€ Input Output Completion Port์˜ ์•ฝ์ž๋กœ์จ ์ž…์ถœ

velog.io