Select 모델을 사용해야 하는 이유
439
작성한 질문수 3
강의를 수강하던중 Select 모델과 (Non)blocking의 차이점에 궁금증이 생겨 질문을 남기게 되었습니다.
Select를 사용하기전 Blocking, Non-blocking 방식에서도 해당 소켓의 정상/비정상 상태를 확인하여 패킷을 전송하는 것으로 이해하였습니다.
그중 Non-blocking은 명칭적으로는 정상/비정상에 큰 신경을 쓰지 않지만 소켓의 상태가 정상/비정상인지 확인하는 과정을 거치기에 자원 손실이 일어나는 것으로 이해됐습니다.
이런 단점을 해결하기 위해 Select 모델을 이용해 send, write에 소켓을 저장해 해당 소켓이 정상인지, send, recv 중 어떤 소켓을 진행해야 할지, 준비되었는지 판단하는 과정이 Blocking과 Non-blocking에서의 상태 파악 과정과 비슷하다는 생각이 들어 Select 모델을 사용하는게 별 다른 이점이 없지 않나? 라는 생각이 들어 질문을 남기게 되었습니다.
답변 1
0
안녕하세요, 인프런 AI 인턴입니다. Kimbab님, Select 모델에 대해 궁금증을 가지고 계셔서 질문해주셨군요.
Select 모델을 사용하는 주된 이유는 동시에 다수의 소켓을 효율적으로 관리할 수 있기 때문입니다. Blocking과 Non-blocking 모델에서는 각각의 소켓을 개별적으로 관리해야 하는 반면, Select 모델을 사용하면 하나의 스레드에서 여러 소켓의 상태를 동시에 모니터링할 수 있습니다. 이는 시스템 자원의 관리 측면에서 매우 효율적이며, 소켓이 준비되었을 때만 작업을 수행하기 때문에 불필요한 자원 소모를 줄일 수 있습니다.
Blocking 모델에서는 특정 작업(예: recv)에 대해서 소켓이 준비될 때까지 기다려야 하고, Non-blocking 모델에서는 소켓의 상태를 계속해서 체크해야 하는 문제가 있습니다. 그러나 Select 모델은 여러 소켓 중에서 준비된 소켓만 감지하고 처리할 수 있어, 많은 수의 클라이언트를 다루는 서버 개발에서 유용하게 사용됩니다. 따라서, Select 모델은 Non-blocking의 장점을 살리면서도, 여러 소켓을 효과적으로 다룰 수 있는 방식으로 활용됩니다.
다만, Select 모델에는 fd_set의 크기 제한이나, 대규모 연결에서 성능 저하 문제가 있어 epoll 같은 더 발전된 I/O 멀티플렉싱 기법을 사용하기도 합니다. Select 모델의 이점이 상황에 따라 더 뛰어나거나, 다른 기법이 필요할 수 있다는 점을 이해하시면 좋을 것 같습니다.
추가적으로 궁금한 점이 있거나 더 자세한 설명이 필요하시면, 언제든 질문 부탁드립니다.
Memory Pool에서 오버플로우 질문입니다.
0
63
2
포토폴리오 및 진로 관련하여 고민입니다.
0
112
1
포토폴리오 관련 고민입니다.
0
62
1
실무에서도 alloc, 스마트포인터 등을 구현해서 쓰는지 궁금합니다.
0
82
2
성능 테스트 결과
0
103
2
게임 서버 Stateful, Stateless 진로 고민
0
121
1
WaitOnAddress와 Sleep의 차이 질문
0
83
1
궁금한거 있습니다.
0
82
2
JobTimer 구동 스레드
0
107
2
TryPop() 동작 관련 질문
0
81
1
로드맵 C#서버 C++서버 방향성 질문
0
148
2
스레드 id를 출력할떄 메인스레드 id도 출력되나요?
0
73
1
생명주기를 위한 의도적 복사
0
86
2
락프리의 실무에서 사용 질문
0
139
2
32bit threadID와 16비트 상위 WriteFlag에 대해
0
101
2
mutex와 sleep 차이점
0
117
1
실무에서는 어떠한 코드 스타일을 사용하는지 궁금합니다
0
152
2
Stomp Allocator의 Release함수에 대한 질문입니다.
0
96
1
공부법 관련해서
0
183
2
MakeShared 함수 관련
0
114
1
지금까지 서버코어에서 만든 내용에 대해 궁금한 점이 있어서 질문 드립니다.
0
144
2
운영체제관련 질문입니다
0
131
1
send하려는 데이터 크기가 크면 memcpy에서 문제가 발생할 것 같습니다.
0
117
2
메모리 풀 질문있습니다.
0
124
1





