1 ๋ถ„ ์†Œ์š”

21์žฅ Asynchronous Notification IO ๋ชจ๋ธ

๋™๊ธฐ์™€ ๋น„๋™๊ธฐ

๋™๊ธฐ ์ž…์ถœ๋ ฅ

image

  • ์ž…์ถœ๋ ฅ ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ ๋ฐ ๋ฐ˜ํ™˜์˜ ์‹œ๊ธฐ๊ฐ€ ๋ฐ์ดํ„ฐ ์ „์†ก์˜ ์‹œ์ž‘ ๋ฐ ์™„๋ฃŒ์˜ ์‹œ๊ธฐ์™€ ์ผ์น˜
  • ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋œ ๋™์•ˆ์—๋Š” ๋‹ค๋ฅธ ์ž‘์—… ์ˆ˜ํ–‰ x

๋น„๋™๊ธฐ ์ž…์ถœ๋ ฅ

image

  • ์ž…์ถœ๋ ฅ ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ ์‹œ์ ์ด ๋ฐ์ดํ„ฐ ์†ก์ˆ˜์‹ ์ด ์‹œ์ž‘๋˜๋Š” ์‹œ๊ธฐ
  • ํ˜ธ์ถœ๋œ ํ•จ์ˆ˜๋Š” ์ด๋‚ด ๋ฐ˜ํ™˜, ๋‚ด๋ถ€์ ์œผ๋กœ ๊ณ„์† ์ž…์ถœ๋ ฅ์ด ์ง„ํ–‰๋˜๋Š” ๋ฐฉ์‹

๋™๊ธฐ Notification

  • ์ž…์ถœ๋ ฅ์˜ Notification(์•Œ๋ฆผ)์ด ๋™๊ธฐ์ 
  • select() ํ•จ์ˆ˜๊ฐ€ ๋Œ€ํ‘œ์  ์˜ˆ์‹œ
    • ์ž…์ถœ๋ ฅ์ด ์™„๋ฃŒ ๋˜๋Š” ๊ฐ€๋Šฅํ•œ ์ƒํƒœ ์‹œ ๋ฐ˜ํ™˜์„ ํ•˜๊ธฐ๋•Œ๋ฌธ

๋น„๋™๊ธฐ Notification

  • ์ž…์ถœ์—ญ์˜ Notification(์•Œ๋ฆผ)์ด ๋น„๋™๊ธฐ์ 
  • WSAEventSelect ํ•จ์ˆ˜
    • ์ž…์ถœ๋ ฅ ์™„๋ฃŒ์— ์ƒ๊ด€์—†์ด ๋ฌด์กฐ๊ฑด ๋ฐ˜ํ™˜
    • ์ž…์ถœ๋ ฅ ์™„๋ฃŒ๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•œ ๋ณ„๋„์˜ ๊ณผ์ • ํ•„์š”
    • IO ์ƒํƒœ๋ณ€ํ™” ๋ช…๋ น -> ๋‹ค๋ฅธ ์ž‘์—… ์ง„ํ–‰ -> IO ์ƒํƒœ๋ณ€ํ™” ํ™•์ธ

๋น„๋™๊ธฐ Notification IO ๋ชจ๋ธ์˜ ์ดํ•ด์™€ ๊ตฌํ˜„

WSAEventSelect

  • ๊ด€์ฐฐ๋Œ€์ƒ ์†Œ์ผ“ํ•ธ๋“ค, ์ด๋ฒคํŠธ ์˜ค๋ธŒ์ ํŠธ ๊ฐ์‹œ
  • ์†Œ์ผ“ ์ „๋‹ฌ๋œ ์ด๋ฒคํŠธ ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด signaled ์ƒํƒœ๋กœ ๋ฐ”๊ฟˆ
  • ์†Œ์ผ“ ํ•˜๋‚˜๋‹น ํ•œ ๋ฒˆ์˜ ํ•จ์ˆ˜ ํ˜ธ์ถœ์ด ์ง„ํ–‰
  • select()์™€ ๋‹ฌ๋ฆฌ ํ•œ๋ฒˆ ๋“ฑ๋ก๋œ ์†Œ์ผ“์€ ๋งค ํ•จ์ˆ˜ํ˜ธ์ถœ ๋•Œ๋งˆ๋‹ค ์žฌ๋“ฑ๋ก ํ•„์š” x

WSACreateEvent / WSACloseEvent

  • manual-reset ๋ชจ๋“œ Event ์˜ค๋ธŒ์ ํŠธ ์ƒ์„ฑ์˜ ํŽธ์˜๋ฅผ ์œ„ํ•ด ์ •์˜

WSAWaitForMultipleEvents

  • ์ด๋ฒคํŠธ ๋ฐœ์ƒ์œ ๋ฌด์˜ ํ™•์ธ์— ์‚ฌ์šฉ
  • TRUE ์ „๋‹ฌ ์‹œ ๋ชจ๋“  Evnet ์˜ค๋ธŒ์ ํŠธ๊ฐ€ signaled ์ƒํƒœ์ผ ๋•Œ ๋ฐ˜ํ™˜
  • FALSE ์ „๋‹ฌ ์‹œ ํ•˜๋‚˜๋งŒ signaled ์ƒํƒœ๊ฐ€ ๋˜์–ด๋„ ๋ฐ˜ํ™˜
  • manual-reset์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฒคํŠธ๋ฅผ ๊ฐ์ง€
    • manual-reset์€ ํ•œ๋ฒˆ signaled(์ด๋ฒคํŠธ ๋ฐœ์ƒ)๊ฐ€ ๋˜๋ฉด ๊ณ„์† ์œ ์ง€ํ•˜๊ธฐ ๋•Œ๋ฌธ

WSAEnumNetworkEvents

  • ์ด๋ฒคํŠธ ์ข…๋ฅ˜ ๊ตฌ๋ถ„
  • ์ด๋ฒคํŠธ ๋ฐœ์ƒ์‹œ ์—๋Ÿฌ ํ™•์ธ ๊ฐ€๋Šฅ
  • ์ˆ˜์‹ ํ•  ๋ฐ์ดํ„ฐ ์กด์žฌ ์‹œ FD_READ
  • ์—ฐ๊ฒฐ์š”์ฒญ์ด ์žˆ๋Š” ๊ฒฝ์šฐ FD_ACCEPT




22์žฅ Overlapped IO ๋ชจ๋ธ

IO์˜ ์ค‘์ฒฉ

  • ์“ฐ๋ ˆ๋“œ์˜ ๊ด€์ ์—์„œ ๋™์‹œ์— ๋‘˜ ์ด์ƒ์˜ ๋ฐ์ดํ„ฐ ์ „์†ก์„ ์ค‘์ฒฉ์‹œํ‚ค๋Š” ๊ฒƒ
  • ๋ฐ์ดํ„ฐ ์ „์†ก์„ ์ค‘์ฒฉ์‹œํ‚ค๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ฐ์ดํ„ฐ ์ž…์ถœ๋ ฅ ํ•จ์ˆ˜๊ฐ€ ๋„Œ-๋ธ”๋กœํ‚น ๋ชจ๋“œ๋กœ ๋™์ž‘ํ•ด์•ผํ•จ

Overlapped IO

๋น„๋™๊ธฐ IO

  • ๋„Œ ๋ธ”๋กœํ‚น ๋ชจ๋“œ์˜ IO
  • IO๊ฐ€ ๋น„๋™๊ธฐ ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•ด์•ผ IO ์ค‘์ฒฉ ๊ฐ€๋Šฅ
  • Overlapped IO๋Š” IO๋ฅผ ์ค‘์ฒฉ์‹œํ‚ค๋Š” ์ž…์ถœ๋ ฅ ๋ชจ๋ธ์ž„

Overlapped IO

  • Overlapped IO๊ฐ€ ์•„๋‹ˆ๋ผ๋„ IO ์ค‘์ฒฉ ๊ฐ€๋Šฅ
  • Overlapped IO์˜ ํฌ์ปค์Šค๋Š” ์ž…์ถœ๋ ฅ์˜ ์™„๋ฃŒ ํ™•์ธ ๋ฐฉ๋ฒ•

WSASocket

  • Overlapped IO์˜ ์†Œ์ผ“ ์ƒ์„ฑ
  • ๋งˆ์ง€๋ง‰ ์ธ์ž๋กœ WSA_FLAG_OVERLAPPED ์ „๋‹ฌ

WSASend

  • Overlapped IO ์ง„ํ–‰
  • IpOverlapped
    • WSAOVERLAPPED ๊ตฌ์กฐ์ฒด ๋ณ€์ˆ˜์˜ ์ฃผ์†Œ ๊ฐ’ ์ „๋‹ฌ
  • IpCompletionRoutine
    • Completion Routine ํ•จ์ˆ˜์˜ ์ฃผ์†Œ ๊ฐ’ ์ „๋‹ฌ

WSAGetOverLappedResult

  • ๋ฐ์ดํ„ฐ ์†ก์ˆ˜์‹  ๊ฒฐ๊ณผ์˜ ํ™•์ธ ๋ฐฉ๋ฒ•
  • ๋ฐ์ดํ„ฐ ์ „์†ก์ด ๊ณ„์† ์ง„ํ–‰๋˜๋Š” ์ƒํ™ฉ์—์„œ๋Š” WSASend๊ฐ€ SOCK_ERROR ๋ฐ˜ํ™˜
  • WSAGetLastError() -> WSA_IO_PENDING ์ด๋ฉด ์ „์†ก ์ง„ํ–‰ ์ค‘
  • ์ „์†ก๋œ ๋ฐ”์ดํŠธ ์ˆ˜ ํ™•์ธ + ์ˆ˜์‹ ๋œ ๋ฐ”์ดํŠธ ์ˆ˜ ํ™•์ธ์—๋„ ์‚ฌ์šฉ

WSARecv

  • WSASend์™€ ๋น„์Šท

Completion Routine

  • IO๊ฐ€ ์™„๋ฃŒ๋˜์—ˆ์„๋•Œ ํ˜ธ์ถœํ•˜๋Š” ํ•จ์ˆ˜
  • IO ์™„๋ฃŒ ์‹œ ๋ฏธ๋ฆฌ ๋“ฑ๋ก๋œ CompletionRoutine์ด ์šด์˜์ฒด์ œ์— ์˜ํ•ด ์ž๋™ ํ˜ธ์ถœ
  • ํ•ด๋‹น ์“ฐ๋ ˆ๋“œ๊ฐ€ alertable wait ์ƒํƒœ์—ฌ์•ผ ํ˜ธ์ถœ ๊ฐ€๋Šฅ
    • alertable wait : ์šด์˜์ฒด์ œ๊ฐ€ ์ „๋‹ฌํ•˜๋Š” ๋ฉ”์„ธ์ง€์˜ ์ˆ˜์‹ ์ด ๊ฐ€๋Šฅํ•œ ์ƒํƒœ (ํŠน๋ณ„ํ•œ ์ผ ์—†์Œ)




ํƒœ๊ทธ:

์นดํ…Œ๊ณ ๋ฆฌ:

์—…๋ฐ์ดํŠธ: