디시인사이드 갤러리

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

갤러리 본문 영역

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

나르시갤로그로 이동합니다. 2025.11.24 02:59:21
조회 58 추천 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/11/24 - -
이슈 [디시人터뷰] 충무로가 주목하는 신예, '세계의 주인' 서수빈 운영자 25/11/24 - -
AD 대학생 필수템! What's in my Bag 운영자 25/11/21 - -
공지 프로그래밍 갤러리 이용 안내 [97] 운영자 20.09.28 48763 65
2904522 짱깨먼지 좃같노 ♥냥덩이의우웅한하룽♥갤로그로 이동합니다. 23:16 2 0
2904521 남북한/일본은 중국에 미세먼지 공동대응해야함 [1] ㅇㅇ(211.216) 23:11 8 0
2904518 안뽑히는 이유 알았다. 나 러스트 존나 못한다. [2] 프갤러(110.8) 23:00 15 0
2904513 회사다니다 보면 바보되어가는 느낌 [3] CANON갤로그로 이동합니다. 22:33 32 0
2904510 가끔 알 수 없는 감정이 들때면 [2] ♥냥덩이의우웅한하룽♥갤로그로 이동합니다. 22:22 23 0
2904506 린겨 ♥냥덩이의우웅한하룽♥갤로그로 이동합니다. 21:57 17 0
2904504 필독 [2] 노력갤로그로 이동합니다. 21:53 30 0
2904503 26학번 새내기들을 위한 입시 면접 합격 가이드(따뜻한 조언)!Y 프갤러(121.142) 21:47 31 1
2904501 와 개씨발 모기잇노 [1] ♥냥덩이의우웅한하룽♥갤로그로 이동합니다. 21:37 18 0
2904500 대한민국 출산율 회생방안 ♥냥덩이의우웅한하룽♥갤로그로 이동합니다. 21:35 15 0
2904499 너, 재판 쌓여있잖아 ♥냥덩이의우웅한하룽♥갤로그로 이동합니다. 21:16 18 0
2904496 API 왤케 비쌈? ㅇㅇ갤로그로 이동합니다. 21:05 33 0
2904495 나님 누웅..✨ ♥냥덩이의우웅한하룽♥갤로그로 이동합니다. 21:04 13 0
2904490 ㄴㅏ씻주준⭐+ [2] ♥냥덩이의우웅한하룽♥갤로그로 이동합니다. 20:32 30 0
2904489 재롱둥이 친중재명 ♥냥덩이의우웅한하룽♥갤로그로 이동합니다. 20:27 19 0
2904484 오늘 숙면을 위해 모든 전자기기 전원 뽑고 자볼 예정임 [4] 가연아갤로그로 이동합니다. 19:39 46 0
2904482 문서작업이랑 테스트만 존나 하고있는데 퇴사할까? [5] ㅇㅇ(220.90) 19:15 48 0
2904480 형들 빡대가리는 코딩 포기해야할까요? [21] 썬콜맨갤로그로 이동합니다. 18:38 111 0
2904479 야 공익이면 군필적는게 낳냐 [6] ㅇㅇ갤로그로 이동합니다. 18:37 62 0
2904478 모모링 위험햇! [1] ♥냥덩이의우웅한하룽♥갤로그로 이동합니다. 18:33 35 0
2904477 예아 [5] 개멍청한유라갤로그로 이동합니다. 18:28 42 0
2904475 냥덩이.. 강해..? [6] ♥냥덩이의우웅한하룽♥갤로그로 이동합니다. 18:21 38 0
2904474 하루에 한번 앱히키 욕하기 프갤러(118.235) 17:21 24 0
2904471 ❤✨☀⭐⚡☘⛩☃나님 시작합니당☃⛩☘⚡⭐☀✨❤ [2] ♥냥덩이의우웅한하룽♥갤로그로 이동합니다. 17:01 45 0
2904470 프로그래밍 진짜 개 입문자 바로 플러터배워도됨? [7] ㅇㅇ(118.235) 16:55 73 0
2904468 퇴사할때 연차남으면 어떻게함? [3] ㅇㅇ(220.90) 16:35 48 0
2904467 lg dx school 진지하게 어떰?? [1] 프갤러(106.101) 16:14 45 0
2904464 Ada, Rust의 0 오버헤드 C 바인딩 [2] 나르시갤로그로 이동합니다. 15:30 40 0
2904463 서버 2u짜리 추천좀 [2] 프갤러(124.194) 15:26 31 0
2904461 아 존나 귀찮다. 요즘 회사들 왜케 깐깐하게 굶? [15] 프갤러(221.149) 14:37 141 1
2904460 LLVM IR 소개 (일종의 통합 가상 어셈블리) 나르시갤로그로 이동합니다. 14:34 31 0
2904459 사람이 어셈블리를 직접 작성하지 않고 LLVM IR을 작성 [5] 나르시갤로그로 이동합니다. 14:26 55 1
2904457 시발 ㅋㅋㅋㅋ [10] 루도그담당(58.233) 13:49 92 0
2904455 아 왜 에러가 나는거야 [9] 루도그담당(58.233) 13:39 79 0
2904453 안드로이드 공부 중인데 몇 가지 질문 및 피드백좀 [5] 프갤러(222.104) 13:34 52 0
2904452 대학교 1학년 프붕이 교양 교수랑 말다툼함 [16] ㅇㅇ(211.234) 13:05 114 0
2904451 앱히키 엄창년 프갤러(118.235) 13:01 33 1
2904450 아오 휴일인데 가까운데 갈만한 곳이 없네..ㅇㅅㅇ [3] ㅇㅅㅇ(106.102) 13:00 37 0
2904448 프갤은 참재밌어 [3] Meow갤로그로 이동합니다. 11:55 113 3
2904443 러스트 인생 40년 갈아넣었습니다... [3] 프갤러(223.63) 10:29 109 0
2904442 컴공 자퇴해야되나 [8] 프갤러(116.35) 10:18 147 0
2904440 기획자 전환 고민 있습니다 프갤러(58.151) 10:10 52 0
2904439 자바 인생 40 년 갈아 넣었습니다. [1] 프갤러(59.16) 10:09 72 0
2904438 C++ 인생 40 년 갈아 넣었습니다. 프갤러(59.16) 09:57 71 0
2904433 난 자바를 좋아하는데 [9] 슈퍼막코더(126.179) 09:02 98 0
2904431 중국 놈들이 여론조작하는 거 밝혀짐 [10] 프갤러(118.235) 08:42 2466 32
2904429 기술적인 얘기인척 하려해도 늘 같은 소리인거 같음 [5] ㅇㅇ갤로그로 이동합니다. 08:14 97 5
2904427 모바일 SDK 개발하는 팀은 어떤일해? [1] 프갤러(220.92) 07:37 41 0
2904426 cyber security능 끝물이공 버려진field잉 무토깽(218.149) 07:24 32 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

디시미디어

디시이슈

1/2