디시인사이드 갤러리

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

갤러리 본문 영역

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

나르시갤로그로 이동합니다. 2025.11.24 02:59:21
조회 137 추천 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 루틴 ON! 운동 찐템! 지금 할인 중 운영자 25/11/27 - -
2905942 현실에 나타난 아카자.jpg ㅁㅁㅅ갤로그로 이동합니다. 12.01 114 0
2905941 점심 간식 저녁 발명도둑잡기(39.7) 12.01 47 0
2905938 우왓, 연회중에 피분수가..ㅡㅡ;; [1] 박정희대통령갤로그로 이동합니다. 12.01 74 1
2905937 "'트럼프시대 美활동' 중국계 연구자, 문화대혁명 같은 혼란 중" 발명도둑잡기(39.7) 12.01 53 0
2905935 [단독] 정부, 쿠팡에 최대 1조3300억 과징금 … 국민 정보 통째 유 발명도둑잡기(39.7) 12.01 68 0
2905934 난 정치에 관심은 없지만 [2] 사람낚는어부갤로그로 이동합니다. 12.01 136 1
2905933 열혈 백업 중..ㅇㅅㅇ [7] 헤르 미온느갤로그로 이동합니다. 12.01 87 0
2905932 WPF 쓰면 쓸수록 역하네 이거 [6] 거북이속이거북갤로그로 이동합니다. 12.01 129 0
2905929 친중도 나쁘지 않은 듯 ㅇㅇ(114.30) 12.01 73 0
2905928 내일 그만둔다고 해야지 [2] ㅇㅇ(118.235) 12.01 102 0
2905927 책읽기 귀찮다 [1] 사람낚는어부갤로그로 이동합니다. 12.01 118 0
2905926 [대한민국] 윤석열 대통령 - 연성 메시지 계엄 강조 ㅇㅇ(121.172) 12.01 57 1
2905925 네카라쿠베 쿠팡 가려면 중국인 되야 한다네 [1] 발명도둑잡기(39.7) 12.01 87 0
2905924 진보정당 역사의 6가지 교훈과 재구성의 길 발명도둑잡기(39.7) 12.01 54 0
2905922 안녕하세요. 프갤러(125.177) 12.01 49 0
2905920 팀프로젝트 말고 1인 프로젝트만 교육시켜주는 프로그램은 없음? [1] 프갤러(221.166) 12.01 53 0
2905918 국정원 존재이유가 감시통제아님??하는일이 타이밍뒷.통수한방(1.213) 12.01 50 0
2905917 "쿠팡 IT 인력 절반 이상 중국인"…내부 폭로에 '발칵' 발명도둑잡기(211.246) 12.01 59 0
2905916 오픈AI 연구원 "고교 중퇴 후 챗GPT로 머신 러닝 배워...박사급들과 ㅇㅇ(106.102) 12.01 54 0
2905915 '일반 사무 업무' 라더니... 비밀 유지 계약서까지..? /KNN 발명도둑잡기(211.246) 12.01 48 0
2905913 호떡의 계절..❤+ [3] 따당갤로그로 이동합니다. 12.01 101 0
2905912 나 더이상 못버티겠어 퇴사해야할듯해.. [3] ㅇㅇ(211.235) 12.01 136 0
2905911 형들 이거 뭐임? [4] 프갤러(118.235) 12.01 115 0
2905910 군대는 언제감? [6] ㅇㅇ갤로그로 이동합니다. 12.01 94 0
2905909 요새 여기 저기 개인정보 털리네 [2] 류류(121.140) 12.01 72 0
2905908 안녕하세요. ㅇㅇ(118.221) 12.01 45 0
2905907 한국 프로그래머 커뮤니티 추천좀 [3] Fhiwjsjsjeje갤로그로 이동합니다. 12.01 133 0
2905904 리눅스 유료로 변환되누 ㅋㅋㅋㅋㅋㅋ 타이밍뒷.통수한방(1.213) 12.01 96 0
2905902 미국회사 쿠팡은 한국고객 개인정보보호나 한국 노동자 인권에 관심이 없다 발명도둑잡기(39.7) 12.01 45 0
2905901 주한미군의 ‘뒤집힌 지도’와 전략적 유연성 발명도둑잡기(39.7) 12.01 55 0
2905900 남자는 애인이나 아내가 없으면 포악해진다 발명도둑잡기(118.235) 12.01 50 0
2905899 쿠팡 개인정보 유출은 중국인 개발자 소행 [4] chironpractor갤로그로 이동합니다. 12.01 119 2
2905898 개발일하면서 주식투자 공부해왔는데 [2] ㅇㅇ(116.43) 12.01 93 0
2905896 [단독] “북한 오물풍선전, 사실상 국군이 먼저 도발…아군에도 비밀이었다 발명도둑잡기(118.235) 12.01 45 0
2905895 빅테크 기업은 C++ 로 개발하냐? [2] 프갤러(59.16) 12.01 99 0
2905889 방구가 진짜 미칠듯이 나옴 [8] 개멍청한유라갤로그로 이동합니다. 12.01 98 0
2905888 혹시 DLL 인젝션 고수있음? [11] 프갤러(1.213) 12.01 161 0
2905887 아~~~~~~~~~~~ [9] 개멍청한유라갤로그로 이동합니다. 12.01 93 0
2905886 Lua script하는 친구들 많아? [10] 프갤러(1.213) 12.01 127 1
2905883 나님… 멧챠 카와이.. ❤+ [2] 따당갤로그로 이동합니다. 12.01 123 0
2905881 나의 인버스 동지들 맘고생이 많소 [4] chironpractor갤로그로 이동합니다. 12.01 94 0
2905879 컴컴.. ㅇㅅㅇ [3] 헤르 미온느갤로그로 이동합니다. 12.01 82 0
2905877 태연 ㅇㅅㅇ 헤르 미온느갤로그로 이동합니다. 12.01 41 0
2905876 하루 한 번 헤르미온느 찬양 헤르 미온느갤로그로 이동합니다. 12.01 72 0
2905871 인지과학조져라 손발이시립디다갤로그로 이동합니다. 12.01 80 0
2905869 결국 jemalloc 래핑하는 걸로 타협봤어요 [1] 나르시갤로그로 이동합니다. 12.01 68 0
2905862 요즘에 AI가 나오니까 시니어 1명 주니어 다수 형태로 가는거같음 프갤러(58.76) 12.01 88 0
2905853 코로나때 국비고졸로 취업했었다면 어땟을까 ㅇㅇ(211.235) 12.01 102 0
2905845 어떤 주장을 할 때 느끼는거지만 [5] 루도그담당(58.233) 12.01 124 1
2905810 방귀 냄새를 맡는다고? 떵을 먹겟다는 소리냐? [8] 헬마스터(211.35) 12.01 273 8
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

디시미디어

디시이슈

1/2