Notice
Recent Posts
Recent Comments
Link
개발자는 기록이 답이다
패스트캠퍼스 환급챌린지 13일차 미션 (2월 13일) : Spring Webflux 완전 정복 : 코루틴부터 리액티브 MSA 프로젝트까지 강의 후기 본문
패스트캠퍼스
패스트캠퍼스 환급챌린지 13일차 미션 (2월 13일) : Spring Webflux 완전 정복 : 코루틴부터 리액티브 MSA 프로젝트까지 강의 후기
slow-walker 2024. 2. 13. 23:05
1. Epoll 소개
어떻게 Selector는 select할 수 있을까?
1) Selector 종류
- 플랫폼마다 최적화된 구현을 제공한다.
- PollSelectorImp : Solaris의 poll시스템콜을 활용하는 PollSelector
- EPollSelectorImpl : Linux에서 사용하는 epoll기반 의 EPollSelector
- KQueueSelectorImpl : macOS / BSD에서 사용하 는 kqueue 기반의 KQueueSelector
- WindowsSelectorImpl : Windows의IOCP기능을 활용한 WindowsSelector
2) file descriptor
- 유닉스계열의os에서는일반적인파일,네트워크소켓, 파이프, 블록 디바이스, 캐릭터 디바이스 등 모든 객체를 파일로 관리
- 열려있는 파일에 접근할때, fd를 이용해서 파일을 지정
- fd는 음이 아닌 정수를 사용. file descriptor table의 index로 사용되기 때문
- 파일을open하면,fd로사용하지않은가장작은값을 할당
- 표준 입력, 표준 출력, 표준 에러에 각각 0, 1, 2 라는 fd 가부여
3) file descriptor 접근
var file = new File(FileFdExample.class .getClassLoader()
.getResource("data.txt")
.getFile());
try (var fis = new FileInputStream(file)) {
FileDescriptor fd = fis.getFD();
Field field = FileDescriptor.class.getDeclaredField("fd");
field.setAccessible(true);
long value = field.getInt(fd);
log.info("fd: {}", value);
}
• java에서는FileInputStream의getFd로 FileDescriptor 객체에 접근 가능
• FileDescriptor는fd값을private으로가지고있기때 문에 reflection으로 조회
4) select system call
int select(int nfds, fd_set *restrict readfds,
fd_set *restrict writefds, fd_set *restrict
errorfds, struct timeval *restrict timeout);
!// ndfs: 감시할 fd 개수
!// readfds: 읽을 데이터가 있는지 감시할 fd 세트
!// writefds: 쓰여진 데이터가 있는지 감시할 fd 세트
!// exceptfds: 예외가 있는지 감시할 fd 세트
!// timeout: 감시를 지속하는 시간. null이라면 계속 대기
- 대부분의 os에서 지원. 범용적으로 사용 가능
- fd_set에 fd를 등록하고 이 fd_set을 system call을 통해서 체크
- fd를 하나씩 체크하므로 시간이 선형적으로 증 가. O(n)의 계산 필요
- fd를 최대 1024 혹은 2048개까지만 등록 가능
- fd 세트를 어플리케이션에서 직접 다루기 때문 에 유지보수가 어렵다
5) epoll
• linux 2.6 이상에서 지원
• os가 fd 세트를 관찰하고 I/O가 준비된 fd가 있다면 application
에게 전달
• macOS/BSD 계열이라면 kqueue, Windows라면 IOCP 지원
epoll 함수
• epoll_create: epoll 인스턴스를 생성한다
• epoll_ctl: epoll 인스턴스에 fd와 관심있는 작업을 등록/삭제/수정한다
• epoll_wait: fd와 관련된 이벤트를 감시한다
와 점점 더 어려워지는것같고, 무슨내용인지 잘 이해가 되지 않는다...
※ 본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다. https://bit.ly/48sS29N