소마 플젝을 진행하는데 있어서
'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)
Epoll의 기초 개념 및 사용 방법
■ EPOLL ? Epoll은 리눅스에서 select의 단점을 보완하여 사용할 수 있도록 만든 I/O통지 모델이다. 파일 디스크립터를 사용자가 아닌 커널이 관리를 하며, 그만큼 CPU는 계속해서 파일 디스크립터의
rammuking.tistory.com
https://github.com/RajivKurian/epoll-example/blob/master/src/epoll.cpp
GitHub - RajivKurian/epoll-example: A sample epoll server.
A sample epoll server. Contribute to RajivKurian/epoll-example development by creating an account on GitHub.
github.com
=====================
python version
http://scotdoyle.com/python-epoll-howto.html
How To Use Linux epoll with Python
How To Use Linux epoll with Python Contents Introduction As of version 2.6, Python includes an API for accessing the Linux epoll library. This article uses Python 3 examples to briefly demonstrate the API. Blocking Socket Programming Examples Example 1 is
scotdoyle.com
참고
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 |