디시인사이드 갤러리

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

갤러리 본문 영역

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

나르시갤로그로 이동합니다. 2025.11.24 02:59:21
조회 132 추천 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 - -
공지 프로그래밍 갤러리 이용 안내 [97] 운영자 20.09.28 48821 65
2906472 휴대폰에서 이미지 크기조절 어캐함? ㅇㅇ(220.78) 17:29 5 0
2906471 지금껏 다녀본 업소들 유형별 특징.txt [1] ㅇㅇ(118.235) 17:13 11 0
2906470 안마방 체험 썰.jpg ㅇㅇ(118.235) 16:53 19 0
2906469 우리신입 코드보면 줘패고싶다 걍 ㅇㅇ [1] 맨날가고싶은사람갤로그로 이동합니다. 16:50 29 0
2906468 이미 선구자가 있었네. 프갤러(49.165) 16:33 24 0
2906467 난 뭔 말만하면 gpt 가 지능평가 해주겠다 함 프갤러(14.47) 16:19 16 0
2906466 코딩 입문할려고 함 Hoping갤로그로 이동합니다. 16:15 13 0
2906465 조국혁신당이 미래다 이기이기 타이밍뒷.통수한방(1.213) 16:14 8 0
2906464 gpt 가 평가한 나의 지능 프갤러(14.47) 16:14 25 0
2906463 님들 저 졸업작품 주제 추천좀요 공기역학갤로그로 이동합니다. 16:06 22 0
2906462 나님 금융회사 세울꺼양 ♥발라당냥덩♥갤로그로 이동합니다. 15:59 25 0
2906461 여자들은 남자에게 돈쓰는걸 아까워하지 않음 [1] 프갤러(59.14) 15:58 23 1
2906459 더이상 프로그래밍을 배우면 안 되는 이유 프갤러(125.176) 15:47 48 0
2906458 C++ 인생 40 년 갈아 넣었습니다. 프갤러(59.16) 15:29 25 0
2906456 팩트) AI 따윈 소프트웨어 같이 문과도 하는 것만 대체 가능 [7] 프갤러(115.4) 15:10 46 0
2906455 코딩에 수학 실력은 양날의 검임 [2] 프갤러(203.228) 14:06 68 0
2906454 농협가는중. 넥도리아(106.101) 13:55 21 0
2906453 ❤✨☀⭐⚡☘⛩☃나님 시작합니당☃⛩☘⚡⭐☀✨❤ [2] ♥발라당냥덩♥갤로그로 이동합니다. 13:38 29 0
2906452 요즘 시대 학점별 직업 발명도둑잡기(118.216) 13:33 43 0
2906451 쿠팡 개인정보 유출은 php와는 무관한 듯 [2] 나르시갤로그로 이동합니다. 13:25 41 0
2906449 이력서 첫 줄 [5] 프갤러(220.79) 13:04 36 0
2906448 ❤+따당이 크리스마스 트리에 예쁜 말 써줘..❤+ [2] 따당갤로그로 이동합니다. 12:44 35 0
2906445 [Etevers] 언리얼엔진 DX Wave(3D Artist) 6기 (~ 프갤러(14.32) 12:02 26 0
2906443 이야 sm판 무섭다 무서워 [1] 프갤러(221.149) 12:02 57 0
2906442 위메이드플레이 개발업계 중에서 어느정도임?? [1] 프갤러(106.101) 12:00 21 0
2906441 안드로이드 소스 잘 아는 사람 프갤러(211.213) 11:58 23 0
2906439 한국 테크 기업중에 화교한테 안먹힌 회사가 없구만 [3] RyuDOG갤로그로 이동합니다. 11:36 58 0
2906434 폐쇄망에서 쓸 수 있는 AI비서 개발 어떻게 생각함 [1] 프갤러(35.194) 11:04 41 0
2906433 [대한민국] 트럼프 대통령 부정선거 리트루스, 윤석열 대통령 메시지 ㅇㅇ(121.172) 10:53 14 0
2906432 ERP랑 붙어서 인터페이스 연동테스트하는데 한방에 됨 ㅇ ㅅㅇ; [1] 프갤러(60.196) 10:45 34 0
2906431 러스트도 액터 모델 쓸 수 있다. [3] 프갤러(221.149) 10:18 38 0
2906427 아침 해가 돌아나오는 골목 ㅇㅅㅇ [4] 헤르 미온느갤로그로 이동합니다. 09:15 43 0
2906424 태연 ㅇㅅㅇ 헤르 미온느갤로그로 이동합니다. 08:34 24 0
2906423 하루 한 번 헤르미온느 찬양 헤르 미온느갤로그로 이동합니다. 08:33 44 0
2906422 실시간 next js 쓰는 사람들 w된거 같다 ㅇㅇ(1.244) 08:31 52 1
2906421 쿠팡 물량이 좀 줄은거 같다..ㅇㅅㅇ 헤르 미온느갤로그로 이동합니다. 08:25 35 0
2906420 흐미.. 소프트웨어 언어/기술 혐오가 너무 심한거 아닌가.. [4] 나르시갤로그로 이동합니다. 08:25 42 0
2906416 워드프레스, 그누보드는 상 쓰레기코드다 프갤러(118.235) 07:29 47 0
2906415 러스트 동시성은반쪽이다 얼랭/엘릭서해라 [1] 프갤러(61.75) 07:24 174 2
2906414 나는 오늘도 아무도 못알아볼 보고서를 쓴다. [2] ㅇㅇ(118.235) 07:13 56 1
2906413 ❤✨☀⭐⚡☘⛩☃나님 시작합니당☃⛩☘⚡⭐☀✨❤ ♥발라당냥덩♥갤로그로 이동합니다. 06:52 44 0
2906412 인지과학조져라 손발이시립디다갤로그로 이동합니다. 05:36 45 0
2906409 커뮤 왜 중독되는지 알겠다. [2] 프갤러(112.171) 03:25 74 0
2906406 길다가가 처음 보는 젊은 여자가 [1] RyuDOG갤로그로 이동합니다. 02:33 74 0
2906403 평온하다 이제 옷을 벗을 시기가 다가오니 [1] RyuDOG갤로그로 이동합니다. 02:18 66 0
2906400 손바닥 낙서 발명도둑잡기(118.216) 02:09 68 0
2906398 참사모욕글 제3자가 고발해서 벌금전과 생겼는데 억울한거지? ㅇㅇ(39.7) 01:54 24 0
2906397 스위스 직접민주주의 비판론 발명도둑잡기(118.216) 01:19 35 0
2906395 gpt로 글쓰는 새끼들 존나패고싶음 [5] 박민준갤로그로 이동합니다. 00:58 88 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

디시미디어

디시이슈

1/2