큐잉
kqueueKqueue는 [1][2]2000년7월에 FreeBSD 4.1에서 도입된 스케일러블 이벤트 알림 인터페이스로 NetBSD, OpenBSD, DragonFly BSD 및 macOS에서도 지원됩니다.Kqueue는 원래 2000년에 Jonathan [1][2]Lemon에 의해 작성되었으며, 그 후 FreeBSD Core Team에 참여했습니다.큐는 nginx와 같은 소프트웨어가 c10k [3][4]문제를 해결하는 것을 가능하게 합니다.
Kqueue는 커널과 사용자 랜드 간에 효율적인 입출력 이벤트 파이프라인을 제공합니다.따라서 단일 시스템콜을 사용하여 이벤트필터를 변경하고 보류 중인 이벤트를 수신할 수 있습니다.kevent(2)
각 메인 이벤트루프 반복마다.이는 다음과 같은 기존의 폴링 시스템콜과 대조됩니다poll(2)
특히 다수의 파일 기술자에서 이벤트를 폴링할 경우 효율이 떨어집니다.
Kqueue는 파일 기술자 이벤트를 처리할 뿐만 아니라 파일 수정 모니터링, 신호, 비동기 I/O 이벤트(AIO), 자 프로세스 상태 변경 모니터링, 나노초 해상도를 지원하는 타이머 등 다양한 알림에도 사용됩니다.또한 more kqueue는 프로비저닝 외에 사용자 정의 이벤트를 사용할 수 있는 방법을 제공합니다.커널에 의해 식별됩니다.
기존에는 다음과 같은 운영 체제만 지원하던 일부 다른 운영 체제poll(2)
또한 현재 에서는 Linux의 epoll 및 Windows 및 Solaris의 I/O 완료 포트 등 보다 효율적인 폴링 대안을 제공하고 있습니다.
libkqueue
의 사용자 공간 구현입니다.kqueue(2)
는 콜을 운영시스템의 네이티브 백엔드 [5]이벤트메커니즘으로 변환합니다.
API[6]
기능 프로토타입 및 유형은 다음에서 확인할 수 있습니다.sys/event.h
.
인트 큐잉(무효);
새 커널 이벤트 큐를 만들고 설명자를 반환합니다.
인트 키벤트(인트 kq, 컨스턴트 구조 키벤트 *체인지리스트, 인트 변경 사항, 구조 키벤트 *이벤트 리스트, 인트 점, 컨스턴트 구조 시간 사양 *타임아웃);
큐에 이벤트를 등록한 후 보류 중인 이벤트를 기다렸다가 사용자에게 반환하는 데 사용됩니다.epoll과는 달리 kqueue는 동일한 기능을 사용하여 이벤트를 등록하고 대기합니다.또한 단일 콜을 사용하여 여러 이벤트소스를 등록 및 변경할 수 있습니다.그changelist
배열을 사용하여 이벤트 큐에 변경(대기할 이벤트 유형 변경, 새 이벤트 소스 등록 등)을 전달할 수 있습니다. 이벤트 큐는 이벤트 시작 전에 적용됩니다. nevents
제공된 사용자의 크기입니다.eventlist
이벤트 큐에서 이벤트를 수신하는 데 사용되는 배열입니다.
EV_SET(케브, 식별하다, 필터, 플래그, 플래그, 데이터., 데이터);
의 편리한 초기화에 사용되는 매크로struct kevent
물건.
「 」를 참조해 주세요.
kqueue를 지원하는 OS에 의존하지 않는 라이브러리:
기타 플랫폼에 해당하는 큐:
- Solaris, Windows 및 AIX: I/O 완료 포트.완료 포트는 요청된 작업이 완료되면 알립니다.
kqueue
는, 파일 기술자가 I/O 조작을 실행할 준비가 되었을 때에도 통지할 수 있습니다. - Linux의 경우:
레퍼런스
- ^ a b Jonathan Lemon (2000). "kqueue, kevent — kernel event notification mechanism". BSD Cross Reference. FreeBSD, OpenBSD, NetBSD, DragonFly BSD.
- "kqueue, kevent -- kernel event notification mechanism". FreeBSD Manual Pages.
- "kqueue, kevent, EV_SET — kernel event notification mechanism". OpenBSD manual page server.
- "kqueue, kevent -- kernel event notification mechanism". DragonFly On-Line Manual Pages.
- ^ a b Jonathan Lemon (2001-05-01). Kqueue: A generic and scalable event notification facility (PDF). Proceedings of the FREENIX Track: 2001 USENIX Annual Technical Conference. USENIX (published June 25–30, 2001).
- ^ "Connection processing methods". nginx.org.
- ^ Andrew Alexeev (2012). "§14. nginx". In Amy Brown; Greg Wilson (eds.). The Architecture of Open Source Applications, Volume II: Structure, Scale and a Few More Fearless Hacks. Lulu.com. ISBN 9781105571817.
- ^ GitHub의 libkqueue
- ^ FreeBSD 시스템 콜 매뉴얼 –