디시인사이드 갤러리

갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

Clair.IO.Poller: 이번에 설계했다가 gg친 API ㅋㅋ

나르시갤로그로 이동합니다. 2025.11.24 02:59:21
조회 122 추천 0 댓글 1

AI한테 일시키니까.. 이렇게 코드도 작성해 줌. ㅋㅋ

with System;

package Clair.IO.Poller is

-- ----------------------------------------------------------------------
-- 타입 정의
-- ----------------------------------------------------------------------

-- Poller 인스턴스를 나타내는 불투명 타입입니다.
-- Limited Private으로 선언하여 할당 및 복사를 제한합니다.
type Context is limited private;

-- 감시할 이벤트의 종류를 정의합니다.
type Event_Condition is (Input, Output, Error, Hang_Up);

-- 여러 이벤트를 동시에 지정하기 위한 배열 타입입니다.
type Event_Flags is array (Event_Condition) of Boolean;
pragma pack (Event_Flags);

-- ----------------------------------------------------------------------
-- Poller API
-- ----------------------------------------------------------------------

-- [create]
-- 새로운 Poller 인스턴스를 생성하고 초기화합니다.
-- 반환값: 초기화된 Poller Context
function create return Context;

-- [destroy]
-- 사용이 완료된 Poller 인스턴스를 파기하고 리소스를 해제합니다.
-- self: 파기할 Context
procedure destroy (self : in out Context);

-- [add]
-- 감시할 파일 디스크립터(fd)와 이벤트를 Poller에 등록합니다.
-- self: Poller Context
-- fd : 감시 대상 파일 디스크립터
-- events: 감시할 이벤트 목록
procedure add (self : in out Context;
fd : Clair.File.Descriptor;
events : Event_Flags);

-- [modify]
-- 이미 등록된 파일 디스크립터의 감시 이벤트를 변경합니다.
-- self: Poller Context
-- fd : 대상 파일 디스크립터
-- events: 변경할 새로운 이벤트 목록
procedure modify (self : in out Context;
fd : Clair.File.Descriptor;
events : Event_Flags);

-- [delete]
-- 특정 파일 디스크립터를 감시 목록에서 제거합니다.
-- self: Poller Context
-- fd : 제거할 파일 디스크립터
procedure delete (self : in out Context;
fd : Clair.File.Descriptor);

-- [wait]
-- 등록된 이벤트가 발생할 때까지 대기합니다.
-- self : Poller Context
-- timeout_ms : 대기 시간 (밀리초). -1인 경우 무한 대기.
-- Count : 발생한 이벤트의 수 (output)
procedure wait (self : in out Context;
results : out Result_Array; -- [핵심] 커널이 여기에 씀
count : out Natural;
timeout_ms : Integer);

private

-- 내부 구현 상세 (운영체제 의존적 데이터 저장)
-- 예시를 위해 간단한 레코드로 정의하며, 실제 구현부는 Body에 작성됩니다.
type Context is record
Handle : System.Address := System.NULL_ADDRESS;
end record;

end Clair.IO.Poller;


내부 구현은 kqueue 및 epoll 겸용으로 할 건데,

Result_Array는 kevent, epoll_event을 추상화한 타입이지.

그런데 wait에서 results가 있는데 그게 루프 돌면서 kevent를 복사해와야하는 것임.

성능 저하가 발생됨.

그래서 gg치고...


API는 똑같게할 것임.

예전에 설계한 Clair.Event_Loop라고 있는데,

Clair.IO.Poller를 제거하고,

Clair.Event_Loop를 kqueue, epoll로 구현할 것임.

API는 다음과 같음.

with Clair.File;
with Clair.IO;

package Clair.Event_Loop is

type Context is limited private;
type Context_Access is access all Context;
type Watch_Condition is (Input_Ready, Output_Ready, Error_Occurred);
type Handle_Id is new Interfaces.C.int;

Invalid_Handle : constant Handle_Id := -1;

type Event_Callback is access procedure (
fd : Clair.File.Descriptor;
events : Clair.IO.Event_Mask;
user_data : System.Address
) with convention => c;

procedure run (self : in out Context);
procedure stop (self : in out Context);

-- 루프의 한 사이클(Step)을 실행
-- 이벤트를 확인하고, 준비된 이벤트가 있다면 콜백을 실행한 뒤 복귀합니다.
-- Timeout: 대기 시간 (초). 0.0이면 즉시 리턴(Polling).
procedure iterate (self : Context);

-- io_wait -- polling

function add_watch (
self : in out Context;
fd : Clair.File.Descriptor;
events : Clair.IO.Event_Mask;
callback : Event_Callback;
user_data : System.Address := System.NULL_ADDRESS
) return Handle_Id;

procedure remove_watch (
self : in out Context;
id : Handle_Id
);

procedure modify_watch (
self : in out Context;
fd : Clair.File.Descriptor;
events : Clair.IO.Event_Mask
);

private

type Context is limited record
is_running : Boolean := False;
end record;

end Clair.Event_Loop;


외부에 kqueue, epoll 관련한 것들을 노출하지 않지.

원래는 Clair.IO.Poller에서 kqueue, epoll을 래핑 후,

Clair.Event_Loop를 Clair.IO.Poller로 구현하려 했는데

오버헤드가 미세하게 추가되기 때문에,

오버헤드 0으로 만들기 위해,

Clair.IO.Poller 추상화 API를 제거하고

Clair.Event_Loop를 kqueue, epoll로 직접 구현하기로 함.

ㅋㅋㅋ

큐티


이거 때문에 설레어 잠을 못 이루는 중 ㅎㅎ

미쳤어 정말~~


추천 비추천

0

고정닉 0

0

댓글 영역

전체 댓글 0
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 이제는 의미 없어진 것 같은 시상식은? 운영자 25/12/01 - -
AD 따뜻한 겨울나기! 방한용품 SALE 운영자 25/11/27 - -
공지 프로그래밍 갤러리 이용 안내 [97] 운영자 20.09.28 48801 65
2906057 php가 그렇게 병신같은 언어임? ㅇㅇ(125.137) 03:38 6 0
2906052 20대때 3개월 개발하고 지금까지 노는중 프갤러(222.107) 02:06 31 0
2906050 물가 올라서 만들오봄 [1] 오잉(118.235) 01:56 22 0
2906045 전세계 간첩들 제일살기좋고 바쁜시대여 ㅋㅋㅋㅋ [1] 타이밍뒷.통수한방(1.213) 01:12 26 1
2906043 해커톤상금좀털러가볼까 따당갤로그로 이동합니다. 00:59 31 0
2906041 한국 개발자 평균 수준이 이미 중국 밑입니다. 프갤러(110.8) 00:49 35 0
2906039 판교에 출장을 다녀왔다 프갤러(140.248) 00:44 23 0
2906031 얘들아 고마웠다 [1] ㅇㅇ(118.235) 00:19 25 0
2906032 재활용 분리수거 질문드려요. 넥도리아(220.74) 00:18 15 0
2906028 나노바나나 ㅇㅇ갤로그로 이동합니다. 00:15 19 0
2906011 인정욕구의 개념을 잘못 알던 헬마스터 병신새끼는 프갤러(211.36) 12.01 38 0
2905997 음기 충전 발명도둑잡기(39.7) 12.01 34 0
2905992 중국인이 몸값 ㅈㄴ싼데 일은 잘해 ㅇㅇ(221.168) 12.01 45 0
2905989 나르시야 github갤에 가라 거기 웹쟁이좀 패라 [1] 프갤러(61.75) 12.01 31 0
2905988 쿠팡 해킹범 짱깨라며 어째 해킹범 욕하는 기관이 하나도 없냐 ㅋㅋ [5] ㅇㅇ(124.48) 12.01 67 1
2905987 홍콩 무협과 힙합 발명도둑잡기(39.7) 12.01 17 0
2905986 중국인 쿠팡 해킹 사태 정리 [1] ♥발라당냥덩♥갤로그로 이동합니다. 12.01 49 2
2905983 오로지 연봉 때문에 이직하는경우 있음? [20] ㅇㅇ(221.168) 12.01 81 0
2905982 해가 짧아지니 잠이 길어진당 ♥발라당냥덩♥갤로그로 이동합니다. 12.01 28 0
2905979 날아다니는 스파게티 괴물 발명도둑잡기(39.7) 12.01 14 0
2905976 해킹 피해자가 아니라 가해자였던 결혼정보업체 발명도둑잡기(39.7) 12.01 18 0
2905974 소액 알바 하다가 스파이가 된 이야기 발명도둑잡기(39.7) 12.01 13 0
2905968 경찰 “쿠팡 개인정보 유출, 기업 보안사고 넘어 국민 발명도둑잡기(39.7) 12.01 17 0
2905962 지금껏 다녀본 업소들 유형별 특징.txt ㅇㅇ(39.7) 12.01 44 0
2905961 [애니뉴스] YxD Ads 개발중 ㅇㅇ(121.172) 12.01 20 0
2905959 llm이 자꾸 인증방식을 jwt로 몰아가네 프갤러(221.149) 12.01 45 0
2905958 재명이 때문에 물가폭등,주거비폭등,환율폭등 [1] ♥발라당냥덩♥갤로그로 이동합니다. 12.01 41 2
2905957 [애니뉴스] YxD Labs 검색 버튼 추가 ㅇㅇ(121.172) 12.01 14 0
2905949 박민호 d-_-b_mh@daum.net 더 많은 계정정보 보기 99+ 프갤러(118.33) 12.01 18 0
2905946 디지털 소유권 환상론으로 유튜브, 스테이블코인도 증발할 수 있다 발명도둑잡기(39.7) 12.01 29 0
2905942 현실에 나타난 아카자.jpg ㅁㅁㅅ갤로그로 이동합니다. 12.01 52 0
2905941 점심 간식 저녁 발명도둑잡기(39.7) 12.01 17 0
2905939 박민호 d-_-b_mh@daum.net 더 많은 계정정보 보기 99+ 프갤러(118.33) 12.01 21 0
2905938 우왓, 연회중에 피분수가..ㅡㅡ;; [1] 박정희대통령갤로그로 이동합니다. 12.01 40 1
2905937 "'트럼프시대 美활동' 중국계 연구자, 문화대혁명 같은 혼란 중" 발명도둑잡기(39.7) 12.01 21 0
2905936 박민호 d-_-b_mh@daum.net 더 많은 계정정보 보기 99+ 프갤러(222.116) 12.01 12 0
2905935 [단독] 정부, 쿠팡에 최대 1조3300억 과징금 … 국민 정보 통째 유 발명도둑잡기(39.7) 12.01 29 0
2905934 난 정치에 관심은 없지만 [2] 사람낚는어부갤로그로 이동합니다. 12.01 69 1
2905933 열혈 백업 중..ㅇㅅㅇ [7] 헤르 미온느갤로그로 이동합니다. 12.01 40 0
2905932 WPF 쓰면 쓸수록 역하네 이거 [5] 거북이속이거북갤로그로 이동합니다. 12.01 72 0
2905929 친중도 나쁘지 않은 듯 ㅇㅇ(114.30) 12.01 38 0
2905928 내일 그만둔다고 해야지 [2] ㅇㅇ(118.235) 12.01 55 0
2905927 책읽기 귀찮다 [1] 사람낚는어부갤로그로 이동합니다. 12.01 64 0
2905926 [대한민국] 윤석열 대통령 - 연성 메시지 계엄 강조 ㅇㅇ(121.172) 12.01 21 1
2905925 네카라쿠베 쿠팡 가려면 중국인 되야 한다네 [1] 발명도둑잡기(39.7) 12.01 38 0
2905924 진보정당 역사의 6가지 교훈과 재구성의 길 발명도둑잡기(39.7) 12.01 20 0
2905922 안녕하세요. 프갤러(125.177) 12.01 20 0
2905921 바람은 찬데 저녁노을은 따스하구낭❤+ [2] ♥발라당냥덩♥갤로그로 이동합니다. 12.01 47 0
2905920 팀프로젝트 말고 1인 프로젝트만 교육시켜주는 프로그램은 없음? [1] 프갤러(221.166) 12.01 25 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

디시미디어

디시이슈

1/2