ETC

epoll을 사용한 I/O Multiplexing

wsoh9812 2021. 7. 26. 00:57

소마 플젝을 진행하는데 있어서 

'I/O Multiplexing' 기법이 필요했고, 이를 구현하기 위해서는 

select, poll, epoll의 시스템 호출? 등이 있다고 한다.

그 중 epoll을 사용한다. 그 이유는 가장 성능이 좋아서이다.!!

 

그래서

나는 epoll을 공부할때 , 참고했던 블로그만 적어 두려한다.

마치 큐레이션처럼 ^^


I/O 멀티플렉싱이란?

- 멀티플렉싱? 하나의 전송로를 통해 여러 종류의 데이터를 전송하는 방식을 말한다.

- 하나의 서버로 다수의 클라이언트에게 서비스를 제공하는 것을 말한다.

 

http://forum.falinux.com/zbxe/index.php?document_srl=463229

 

멀티플렉싱 서버를 구현하는데 있어서 select, epoll 방식이 존재한다.

 

select 함수

- 멀티플렉싱의 대표적인 모델이다.

- windwos에서도 동일한 이름으로 기능을 제공하기때문에 이식성이 높다.

- 한 곳에 여러개의 파일 디스크립터를 모아놓고 동시에 관찰할 수 있다.

-  입출력을 관리하고자 하는 파일의 그룹을 fd_set이라는 파일 비트 배열에 집어 넣고, 비트 배열의 값이 변했는지를 확인하는 방식이다.

- 단점은모든 파일 디스크립터를 대상으로 이벤트를 관찰해야한다. for문으로 

 

epoll

- 상태변화의 확인을 위해 파일 디스크립터 전체를 대상으로 반복문이 필요없다.

- 장점은 이벤트가 발생한 소켓 정보만 반환 된는 것이다.

 

 

 

 

EAGAIN 개념

Edge Trigger을 사용할 떄 필요한 개념이다.

 

Edge Trigger의 문제점 해결 : read(2) 나 write(2) 가 errno로 EGAIN을 반환할때만 wait 을 하도록 하자 (epoll_wait)

 

 

 

https://jacking75.github.io/choiheungbae/%EB%AC%B8%EC%84%9C/epoll%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%9C%20%EB%B9%84%EB%8F%99%EA%B8%B0%20%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D.pdf

 

https://rammuking.tistory.com/entry/Epoll%EC%9D%98-%EA%B8%B0%EC%B4%88-%EA%B0%9C%EB%85%90-%EB%B0%8F-%EC%82%AC%EC%9A%A9-%EB%B0%A9%EB%B2%95

 

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

https://1d1cblog.tistory.com/370