디시인사이드 갤러리

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

갤러리 본문 영역

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

나르시갤로그로 이동합니다. 2025.11.24 02:59:21
조회 147 추천 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/08 - -
이슈 [디시人터뷰] 솔직함을 리뷰하는 유튜버, 흑백리뷰 운영자 25/12/09 - -
AD 루틴 ON! 운동 찐템! 지금 할인 중 운영자 25/11/27 - -
2905076 회사에 다른오퍼를 빌미로 연봉협상 시도하는거 [13] 프갤러(112.219) 11.27 166 0
2905075 33세 남성 벌레인생 나같은 성욕부시레기도 결혼 가능하려나 ㅇㅇ(203.232) 11.27 102 0
2905073 이재명 대통령님 전자정부프레임워크를 러스트 기반으로 이전해주십 [4] 프갤러(110.8) 11.27 151 0
2905072 [대한민국] 이재명 때문에- [1] 1급시크릿공문(121.172) 11.27 103 1
2905070 개발자 새끼들이 씹덕 애니 프사 하는 이유는? [2] ㅇㅇ(211.235) 11.27 98 0
2905069 졸라 피곤하네..ㅇㅅㅇ 헤르 미온느갤로그로 이동합니다. 11.27 66 0
2905067 오늘은 에러처리 패키지 구조를 잡아야겠어요 [2] 나르시갤로그로 이동합니다. 11.27 89 0
2905066 산책로 다리 ㅇㅅㅇ [2] 헤르 미온느갤로그로 이동합니다. 11.27 81 0
2905065 태연 ㅇㅅㅇ 헤르 미온느갤로그로 이동합니다. 11.27 73 0
2905064 하루 한 번 헤르미온느 찬양 헤르 미온느갤로그로 이동합니다. 11.27 80 0
2905063 찬반논란인데 너희 생각은? ㅇㅇ(203.232) 11.27 89 0
2905061 ❤✨☀⭐⚡☘⛩☃나님 시작합니당☃⛩☘⚡⭐☀✨❤ ♥냥덩이의우웅한하룽♥갤로그로 이동합니다. 11.27 138 0
2905060 이재명이 잘 하고 잇다는 증거.jpg [4] 야옹아저씨갤로그로 이동합니다. 11.27 149 1
2905058 죽은 인터넷 이론 발명도둑잡기(118.216) 11.27 101 0
2905057 음기 충전 발명도둑잡기(118.216) 11.27 138 0
2905056 북한학자 조희승의 가야사- 임나는 한반도가 아닌 일본 서부지역에 발명도둑잡기(118.216) 11.27 58 0
2905053 영화 <프랑스> 인기래서 생각나는 예전 글 발명도둑잡기(118.216) 11.27 75 0
2905047 내가 예술계 새 트렌드 알려준다 발명도둑잡기(118.216) 11.27 77 0
2905042 지금 분위기가 프갤러(49.165) 11.27 112 0
2905041 Le Solitaire. Theo Mercier 발명도둑잡기(118.216) 11.27 73 0
2905040 DB는 조인을 안하는게 걍 최선인듯 [2] 프갤러(58.29) 11.27 121 0
2905038 책사풍후의 게임 엔진 개발 일지_프로젝트 삼국사기 책사풍후갤로그로 이동합니다. 11.27 104 0
2905036 씨발국가 완전 중국 다 되었네 이딴 병신같은걸로 전과 ㅋㅋㅋㅋ ㅇㅇ(39.7) 11.27 130 0
2905034 ai는 코드를 낳고 ㅇㅇ갤로그로 이동합니다. 11.27 93 1
2905033 노력한 보상을 갈취당하고 주식이란 도박에 몰두하는 시민들 발명도둑잡기(118.216) 11.27 91 0
2905027 위성 쏘는 이유가 나오는 영화 <에너미 오브 더스테이츠> [1] 발명도둑잡기(118.216) 11.27 127 0
2905025 국내에 외국계 기업 특 ) 짱깨랑 양키랑 좇본 인도 대기업들 몰렸는데 타이밍뒷.통수한방(1.213) 11.27 109 0
2905023 윤도현-타잔 발명도둑잡기(118.216) 11.27 72 0
2905022 위성 싸서 좋은점은 짱깨들밖에없잖누 ㅋㅋㅋㅋㅋ 타이밍뒷.통수한방(1.213) 11.27 74 0
2905021 위성 쏘는 이유 중 하나가 야당 감시다 발명도둑잡기(118.216) 11.27 72 0
2905017 내일 또 클리앙새끼를 누리호 ㅇㅈㄹ하면서 난리치겠누 [1] 타이밍뒷.통수한방(1.213) 11.27 99 0
2905015 냥덩이 잡아다가 누리호에 묶어서 쏴올렸다는데? 발명도둑잡기(118.216) 11.27 78 0
2905014 누리호 궤도 진입 성공 대 실패 예상 댓글좀 발명도둑잡기(118.216) 11.27 71 0
2905013 오늘의 영상 기획 실마리: 작품 발표를 로케트 발사처럼 패러디 발명도둑잡기(118.216) 11.27 69 0
2905010 조선이 위성을 쏘아도 한국은 도발이라고 표현하는데 발명도둑잡기(118.216) 11.27 81 0
2905009 법무부 영문 표기가 Ministry of Justice 발명도둑잡기(118.216) 11.27 80 0
2905008 DB 검색할 때 %like%는 걍 없다고 생각하고 써야함? [3] 프갤러(58.29) 11.27 102 0
2905006 이거 항소하면 무죄 내지는 벌금50까지 줄여지냐? 씨발국가야? ㅇㅇ(39.7) 11.26 126 2
2905005 대통령보다 연봉높은 우주청 현실 [1] 타이밍뒷.통수한방(1.213) 11.26 201 0
2905004 개인 자격으로 인공위성 만들어 발사한 미디어아티스트 송호준 [1] 발명도둑잡기(118.216) 11.26 62 0
2905003 해외기사들보면 삼성 lg제품 존나 광고하네 타이밍뒷.통수한방(1.213) 11.26 145 0
2905002 소프트웨어 엔지니어의 몰입 손발이시립디다갤로그로 이동합니다. 11.26 75 0
2905001 [공식] 누리호 4차 발사 현장 생중계 발명도둑잡기(118.216) 11.26 52 0
2905000 이거 ㅈㄴ 억울한데 항소할지 걍 벌받을지 추천좀 [1] ㅇㅇ(39.7) 11.26 112 0
2904999 슬슬 재취업들어가야겠군 ㅇㅇ(113.59) 11.26 94 0
2904998 R이나 파이썬같은 툴 돌릴 때 작동 원리에 대한 수학 ㅇㅇ(211.108) 11.26 101 0
2904997 음악인 나오는 영화 추천 <꿈의 제인> 발명도둑잡기(118.216) 11.26 93 0
2904994 충격적임.. ♥냥덩이의우웅한하룽♥갤로그로 이동합니다. 11.26 123 0
2904992 밤하늘 별빛이 호롱불 같구낭 ♥냥덩이의우웅한하룽♥갤로그로 이동합니다. 11.26 139 0
2904988 Wendy & Lisa-The Closing Of the Year 발명도둑잡기(118.216) 11.26 60 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

디시미디어

디시이슈

1/2