디시인사이드 갤러리

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

갤러리 본문 영역

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

나르시갤로그로 이동합니다. 2025.11.24 02:59:21
조회 121 추천 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 - -
2904932 송사고 뭐고 루도그담당(58.233) 11.26 82 4
2904931 쳇트ㅡ Meow갤로그로 이동합니다. 11.26 75 0
2904930 ㅆㅇㅆ 같은애 고소하면 내가 나쁜놈이 되잖아 RyuDOG갤로그로 이동합니다. 11.26 82 0
2904929 에에 고소할거다노 ~ 루도그담당(58.233) 11.26 69 0
2904928 이렇게 티배깅할때 마다 늘 즐거움 RyuDOG갤로그로 이동합니다. 11.26 67 0
2904927 어딜가나 벌레가 꼬여 ㅇㅇ [1] RyuDOG갤로그로 이동합니다. 11.26 90 0
2904926 오늘의 소설, 영화 실마리: 범죄 학교 발명도둑잡기(118.216) 11.26 44 0
2904925 ㅆㅇㅆ = 앱히키 ㅇㅇ(222.108) 11.26 74 0
2904924 Ai 발전 속도가 너무 느림 [4] RyuDOG갤로그로 이동합니다. 11.26 118 0
2904923 linq 다른언어용으로 비슷하게 만든거 [2] 발명도둑잡기(118.216) 11.26 106 0
2904922 브레인스토밍 책사풍후갤로그로 이동합니다. 11.26 52 0
2904920 ❤✨☀⭐⚡☘⛩☃나님 시작합니당☃⛩☘⚡⭐☀✨❤ ♥냥덩이의우웅한하룽♥갤로그로 이동합니다. 11.26 72 0
2904919 이찬혁-SINNY SINNY 발명도둑잡기(118.216) 11.26 63 0
2904918 ㅎㅎAI가 버그도 다 잡아 줌 ㅋㅋ 소스코드 평가 겁나 편하네 나르시갤로그로 이동합니다. 11.26 88 0
2904917 vscode 은근 무겁네 [3] 프갤러(110.8) 11.26 88 0
2904916 프뉴비 질문) tkinter로 gui프로그램 작성중인데 한글이 [5] 프갤러(123.215) 11.26 69 0
2904915 Clair.Event_Loop 구현 완료함. ㅋㅋ 현재 손적화 중 [10] 나르시갤로그로 이동합니다. 11.26 97 0
2904914 내란견 냥덩이 때문에 한국이 핵폭탄 맞게 됐다 [1] 발명도둑잡기(118.216) 11.26 74 1
2904912 ai나와서 존나 좆같긴해. [3] 코딩의신(121.139) 11.26 146 2
2904910 다리꼬는거 같은거로 시비거는거 프로페셔널하지 못함 [1] 프갤러(110.8) 11.26 84 0
2904909 pm이 사장앞에서 다리꼬는거 가능하냐? [9] 헬마스터갤로그로 이동합니다. 11.26 152 0
2904908 벨튀 감시자 만들어봄 [5] 옛살비갤로그로 이동합니다. 11.26 113 0
2904906 join보다 sub query가 더 좋은 경우도 있나? [5] 프갤러(58.29) 11.26 94 0
2904905 비전공자에서 AIoT 실무자로! HDC랩스 NOVA 2기 모집 (국비지원 프갤러(14.32) 11.26 64 0
2904903 사용자 대화 주제/수준과 제미니의 감정적 반응 연관성 [8] 나르시갤로그로 이동합니다. 11.26 101 0
2904902 퍼플렉시티 쓰는데 질문좀. 프갤러(221.164) 11.26 93 0
2904900 면접 뭐입고가냐 그래서 [4] ㅇㅇ갤로그로 이동합니다. 11.26 117 0
2904899 ai 발전하믄 좋은 점 프갤러(118.235) 11.26 70 0
2904898 근데 사실 ㅆㅇㅆ보다 심한 더닝크루거 애들도 많음 [2] 프갤러(121.139) 11.26 119 2
2904897 linq 한번 맛보니까 자스 쳐다보기도 싫노 [4] 뉴진파갤로그로 이동합니다. 11.26 95 0
2904896 ai나와서 이제 ㅆㅇㅆ같은애들 대거 양산될거 생각하니 무섭네 ㅋㅋ [1] 프갤러(121.139) 11.26 107 5
2904894 세글자닉 우울증갤러리에서 활동한것도 [2] 프갤러(121.139) 11.26 100 2
2904891 속보 ) 윈도우12 2026년에 출시 연기, 윈도우12 사실상 개발 중 타이밍뒷.통수한방(1.213) 11.26 83 1
2904890 호캉스 좋다 [2] 543543갤로그로 이동합니다. 11.26 111 0
2904888 븍쪽도아니고남쪽에서 태어나서 좇같은새끼들일수록 잘살더라 [1] 타이밍뒷.통수한방(1.213) 11.26 64 0
2904885 인지과학조져라 손발이시립디다갤로그로 이동합니다. 11.26 78 0
2904883 진짜 오늘 딸라 쎄일하네 [5] chironpractor갤로그로 이동합니다. 11.26 146 0
2904881 가치를 인정해주지 않는 사람에겐 그만큼만 해주면 된다. [12] 프갤러(221.149) 11.26 188 1
2904880 프로그래머는 티 나는 쪽 아닌가? ㅇㅅㅇ [2] 헤르 미온느갤로그로 이동합니다. 11.26 128 0
2904877 뱀 가족 ㅇㅅㅇ [1] 헤르 미온느갤로그로 이동합니다. 11.26 82 0
2904876 태연 ㅇㅅㅇ 헤르 미온느갤로그로 이동합니다. 11.26 71 0
2904875 하루 한 번 헤르미온느 찬양 헤르 미온느갤로그로 이동합니다. 11.26 64 0
2904874 프로그래머는 뭐를 해도 티가 안나. [1] 프갤러(59.16) 11.26 152 0
2904871 스타크래프트와 같은 RTS 게임에서 가장 치명적인 문제는 책사풍후갤로그로 이동합니다. 11.26 85 0
2904868 나님 달러 추가매수중 재명이 때문에 국가부도사태 터질듯 [3] ♥냥덩이의우웅한하룽♥갤로그로 이동합니다. 11.26 151 0
2904867 계산이랑 증명이란것도 결국 원숭이를 위해서 존재함 [2] RyuDOG갤로그로 이동합니다. 11.26 103 0
2904865 음기 충전 발명도둑잡기(118.216) 11.26 124 0
2904864 영국 산업혁명 때 빈곤층은 아동착취 찬성 발명도둑잡기(118.216) 11.26 60 0
2904863 X 계정 국적표기 업뎃 됐었구나 ㅇㅅㅇ [1] ㅇㅇ(112.157) 11.26 96 0
2904860 유튜브 타고 퍼지는 '1020 조폭' 실태 살펴보니 발명도둑잡기(118.216) 11.26 77 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

디시미디어

디시이슈

1/2