소마 플젝을 진행하는데 있어서
'I/O Multiplexing' 기법이 필요했고, 이를 구현하기 위해서는
select, poll, epoll의 시스템 호출? 등이 있다고 한다.
그 중 epoll을 사용한다. 그 이유는 가장 성능이 좋아서이다.!!
그래서
나는 epoll을 공부할때 , 참고했던 블로그만 적어 두려한다.
마치 큐레이션처럼 ^^
I/O 멀티플렉싱이란?
- 멀티플렉싱? 하나의 전송로를 통해 여러 종류의 데이터를 전송하는 방식을 말한다.
- 하나의 서버로 다수의 클라이언트에게 서비스를 제공하는 것을 말한다.
멀티플렉싱 서버를 구현하는데 있어서 select, epoll 방식이 존재한다.
select 함수
- 멀티플렉싱의 대표적인 모델이다.
- windwos에서도 동일한 이름으로 기능을 제공하기때문에 이식성이 높다.
- 한 곳에 여러개의 파일 디스크립터를 모아놓고 동시에 관찰할 수 있다.
- 입출력을 관리하고자 하는 파일의 그룹을 fd_set이라는 파일 비트 배열에 집어 넣고, 비트 배열의 값이 변했는지를 확인하는 방식이다.
- 단점은모든 파일 디스크립터를 대상으로 이벤트를 관찰해야한다. for문으로
epoll
- 상태변화의 확인을 위해 파일 디스크립터 전체를 대상으로 반복문이 필요없다.
- 장점은 이벤트가 발생한 소켓 정보만 반환 된는 것이다.
Edge Trigger을 사용할 떄 필요한 개념이다.
Edge Trigger의 문제점 해결 : read(2) 나 write(2) 가 errno로 EGAIN을 반환할때만 wait 을 하도록 하자 (epoll_wait)
https://github.com/RajivKurian/epoll-example/blob/master/src/epoll.cpp
=====================
python version
http://scotdoyle.com/python-epoll-howto.html
참고
https://www.joinc.co.kr/w/Site/system_programing/File/select
'ETC' 카테고리의 다른 글
[할 일] 앱이 실행되는 과정 분석 (apk데이터를 어떻게 EP까지 로드하는지) (0) | 2021.08.09 |
---|---|
Proxy DLL Hijacking for kernel32.dll 삽질 (0) | 2021.08.01 |
DLL Hijacking Concepts of Organizing (0) | 2021.07.22 |
악성코드관련 멘토링 정리 (0) | 2021.06.15 |
Atombombing 기법 wtih Atom Table, APC (0) | 2020.12.31 |