디시인사이드 갤러리

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

갤러리 본문 영역

Ada 프로그래밍: 1. 다중 통신 및 비동기 제어: select 문

루비갤로그로 이동합니다. 2025.07.16 00:39:29
조회 49 추천 0 댓글 0

Ada 프로그래밍 초안입니다. 내용 검수가 아직 되지 않았습니다.


1. 다중 통신 및 비동기 제어: select 문


accept 문은 하나의 entry만 지정하여 동기적으로 기다릴 수 있다는 한계가 있습니다. 만약 태스크가 여러 종류의 이벤트를 동시에 기다리거나, 무한정 기다리지 않고 다른 작업을 수행해야 한다면 어떻게 해야 할까요? Ada는 바로 이 문제를 해결하기 위해 강력한 select 문을 제공합니다.


select 문은 여러 가능한 이벤트 경로 중 하나를 선택적으로 실행하는 구문으로, 본질적으로 이벤트 다중화(event multiplexing)를 언어 차원에서 구현한 것입니다.


다중 진입점 대기


가장 기본적인 select 문은 여러 accept 문 중 하나를 선택하여 실행하는 것입니다. 이를 통해 태스크는 여러 종류의 요청을 동시에 처리할 수 있습니다.


예시: 제한된 크기의 버퍼 (bounded buffer)


다음은 아이템을 저장(Write)하거나 꺼내(Read)갈 수 있는 버퍼 태스크입니다. select 문 덕분에 버퍼가 비어있지 않으면 Read 요청을, 가득 차지 않았으면 Write 요청을 모두 받아들일 준비를 할 수 있습니다.


task type Bounded_Buffer is

   entry Write (Item : in Integer);

   entry Read  (Item : out Integer);

end Bounded_Buffer;


task body Bounded_Buffer is

   Pool : array (1..10) of Integer;

   Count : Integer range 0..10 := 0;

   -- ... 인덱스 변수 선언 ...

begin

   loop

      select

         when Count < 10 =>          -- 버퍼가 가득 차지 않았을 때만

            accept Write (Item : in Integer) do

               -- 아이템을 버퍼에 저장하는 로직

            end Write;

            Count := Count + 1;

      or

         when Count > 0 =>           -- 버퍼가 비어있지 않을 때만

            accept Read (Item : out Integer) do

               -- 아이템을 버퍼에서 꺼내는 로직

            end Read;

            Count := Count - 1;

      or

         terminate; -- 다른 태스크가 모두 종료되면 이 태스크도 종료

      end select;

   end loop;

end Bounded_Buffer;


when 조건문을 통해 각 accept의 실행 조건을 동적으로 제어할 수 있으며, 먼저 조건이 충족되고 호출이 들어온 entry가 실행됩니다.


비차단 (non-blocking) 호출


때로는 상대방이 준비되지 않았을 때 무작정 기다리지 않고 즉시 다른 일을 처리하고 싶을 수 있습니다. 이때는 select 문에 else 절을 사용합니다.


-- 로그 서버에 메시지 전송을 시도

select

   Log_Server.Send_Message ("Status Update");

else

   -- Log_Server가 즉시 메시지를 받을 수 없다면,

   -- 기다리지 않고 그냥 이 코드를 실행한다.

   Put_Line ("Log server is busy, skipping update.");

end select;


이 구문은 랑데부를 시도하되, 상대가 준비되지 않았으면 대기하지 않고 즉시 else 부분으로 빠져나와 실행을 계속합니다.


타임아웃 (timeout) 구현


네트워크 통신 등에서는 응답을 무한정 기다릴 수 없습니다. select 문에 delay 절을 사용하면 지정된 시간만큼만 기다리는 타임아웃을 손쉽게 구현할 수 있습니다.


select

   accept Get_Data_From_Sensor (Value : out Sensor_Data);

or

   delay 5.0; -- 5.0초 동안만 기다린다.

   -- 5초가 지나도 Get_Data_From_Sensor 호출이 없으면 타임아웃 발생

   Raise_Error ("Sensor timeout!");

end select;


이처럼 select 문은 단순한 동기 통신을 넘어, 조건부 실행, 비차단 호출, 타임아웃 등 견고한 동시성 시스템을 만드는 데 필요한 핵심적인 제어 구조를 제공합니다.


[심화 학습] 고수준 추상화와 저수준 최적화


Ada select 문의 가장 큰 장점 중 하나는, kqueue(FreeBSD)나 epoll(Linux)과 같은 운영체제 종속적인 저수준 API를 직접 다루지 않고도 이식성 있는 표준 문법만으로 강력한 동시성 제어가 가능하다는 점입니다.


성능 또한 뛰어납니다. 현대적인 Ada 컴파일러(GNAT)의 런타임 시스템은 내부적으로 해당 운영체제에서 가장 효율적인 I/O 다중화 메커니즘을 사용하도록 구현되어 있습니다.


리눅스 (Linux): epoll 사용

FreeBSD: kqueue 사용

윈도우 (Windows): IOCP (I/O Completion Ports) 사용


즉, 프로그래머는 select라는 표준적이고 안전한 고수준 문법으로 코드를 작성하면, 컴파일러와 런타임 시스템이 자동으로 타겟 운영체제에 최적화된 가장 빠른 시스템 콜로 변환해 줍니다. 따라서 개발자는 복잡한 저수준 코드가 아닌 비즈니스 로직에 집중하면서도 성능은 최고 수준으로 확보할 수 있습니다. 이것이 Ada가 미션 크리티컬한 실시간 시스템이나 고신뢰성 서버 개발에 사용되는 중요한 이유 중 하나입니다.

추천 비추천

0

고정닉 0

0

댓글 영역

전체 댓글 0
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 탈모 걱정 없어 보이는 머리숱 금수저 스타는? 운영자 25/07/14 - -
2872244 비전공 국비 개발자 취업했다가 튀었음 [1] ㅇㅇ(39.7) 07.17 217 0
2872241 인스타그램 켜고 두번째 추천 게시물 발명도둑잡기갤로그로 이동합니다. 07.17 26 0
2872237 미국가서 성공할 거라던 앱히키 어디갔냐?? 프갤러(222.108) 07.17 35 0
2872235 연봉 자랑하던 앱히키 어디갔냐 ㅋㅋㅋㅋㅋ [1] 프갤러(222.108) 07.17 50 0
2872234 앱히키 어디갔냐??? [1] 프갤러(222.108) 07.17 47 1
2872232 "북에서도 GPT 쓰네" 글 관련 발명도둑잡기갤로그로 이동합니다. 07.17 36 0
2872231 태울 영웅문 wpe 알려주실분 사례하겠습니다 프갤러(125.181) 07.17 28 0
2872229 신좌파와 제국주의 발명도둑잡기갤로그로 이동합니다. 07.17 100 0
2872227 앰네스티인터내셔널에 CIA 프론트 NED나 USAID도 기부하나 발명도둑잡기갤로그로 이동합니다. 07.17 23 0
2872225 서태지 영어명 Taiji는 태극의 중국식 발음이다 발명도둑잡기갤로그로 이동합니다. 07.17 27 0
2872221 "사상 가장 비싼 이메일"…英군인 전송실수에 역대급 안보사고 발명도둑잡기갤로그로 이동합니다. 07.17 38 0
2872219 <퀴즈쇼> 발명도둑잡기갤로그로 이동합니다. 07.17 18 0
2872217 모든 포폴용프로젝트의 질에대해 비관적임 공기역학갤로그로 이동합니다. 07.17 67 0
2872215 첫코딩 happyyellowj8갤로그로 이동합니다. 07.17 37 0
2872210 '서울의 봄' 감독도 충격 받았다는 이 장면, 보러 오세요 발명도둑잡기갤로그로 이동합니다. 07.17 39 0
2872209 오늘 목요일이었냐? 금요일 아니었음? 넥도리아(220.74) 07.17 32 0
2872208 3년 차 이상인데도 프갤러(211.202) 07.17 52 0
2872207 나는 태어나서 지금까지 읽은 만화책 30권 이하고 발명도둑잡기갤로그로 이동합니다. 07.17 29 0
2872206 흠, 신념을 잃어버린자들, 딱쿤(61.253) 07.17 37 0
2872204 진보개혁4당 원내대표, 우원식 국회의장 만나 국회 정치개혁특위 구성 요구 발명도둑잡기갤로그로 이동합니다. 07.17 33 0
2872201 화교분탕 <58.127> 일당의 불법 바이럴 행적 ㅇㅇ(110.70) 07.17 39 0
2872200 냐냐냐뇨뇨뇨뉴뉴뉴냐냐냐 딱쿤(61.253) 07.17 32 0
2872198 노래방 프렌차이즈 회장 직원들 수년 성추행 발명도둑잡기갤로그로 이동합니다. 07.17 50 0
2872197 끼히잉.. 끼힝.. 딱쿤(61.253) 07.17 30 0
2872196 교회서 ‘동성애 없애는 퇴마’ 당한 30대…법적 대응 나선 사연 발명도둑잡기갤로그로 이동합니다. 07.17 29 0
2872195 동영상 하나찍고 망해버린 게임 재밋지않냐? [2] 헬마스터갤로그로 이동합니다. 07.16 66 0
2872194 106.101아 얼마전부터 나타나서 자기 중견기업 어쩌고하는데 애들한테 [3] ㅆㅇㅆ(124.216) 07.16 73 0
2872193 프갤러 외국 나가면 여러 국가한테 미행 당할 듯 발명도둑잡기갤로그로 이동합니다. 07.16 35 0
2872192 si 이직 해 말아? 프갤러(119.196) 07.16 71 0
2872191 개병신 같은 패치가드 루도그담당(58.239) 07.16 41 0
2872190 유명재한테 사기당했다 프갤러(211.119) 07.16 38 0
2872189 하아아앙~.. 딱! 딱쿤(61.253) 07.16 50 0
2872188 "큰 거 온다" 시리즈 발명도둑잡기갤로그로 이동합니다. 07.16 28 0
2872187 한국 대공황 직전인데 집값 폭등하는 이유 (이현훈 교수 2부) 발명도둑잡기갤로그로 이동합니다. 07.16 34 0
2872186 무역일 할려면 그 나라언어vs경제학 프갤러(121.175) 07.16 26 0
2872185 진짜 경제위기 오면, 이 '4가지'를 무조건 하세요 (이현훈 교수 3부 발명도둑잡기갤로그로 이동합니다. 07.16 31 0
2872184 병신들아 잘 있어라 ㅋㅋㅋㅋㅋㅋㅋ [8] 아스카영원히사랑해갤로그로 이동합니다. 07.16 137 0
2872183 IMF보다 무서운 위기 곧 터진다. 살아남는 방법은 단 하나입니다 (이현 발명도둑잡기갤로그로 이동합니다. 07.16 33 0
2872182 "제2의 IMF 위기 온다?" 곧 원화가 휴지조각 될 수 있다 [김대종 [2] 발명도둑잡기갤로그로 이동합니다. 07.16 54 0
2872181 후훗 [1] 딱쿤(211.235) 07.16 78 0
2872180 이직중인데 코테 망함 ㅠㅠ [9] 프갤러(14.12) 07.16 236 1
2872179 미중 스테이블코인 전쟁이 시작됐습니다(ft.지니어스액트) [1] 발명도둑잡기갤로그로 이동합니다. 07.16 38 0
2872178 씨발 에어컨 틀면 춥고 끄면 덥고 [3] 프갤러(121.139) 07.16 51 0
2872177 [텍스트 에디터] 덕질 전용 게시판 개설 [2] 프갤러(121.172) 07.16 36 1
2872175 풀재택 sm 450에 프리 오퍼왔는데 할까 [3] ㅇㅇ(223.39) 07.16 81 0
2872173 최근에 입문했는데 포인터 질문있어요 [10] 프갤러(125.249) 07.16 105 0
2872171 금값이 폭등한 게 아니라 돈 가치가 급락한 것이다 (박종훈의 지식한방) [2] 발명도둑잡기갤로그로 이동합니다. 07.16 40 1
2872169 종이돈 흥황 [1] ㅇㅇ갤로그로 이동합니다. 07.16 31 0
2872167 종이 돈이 무너진다. 달러와 원화도 위험할까? (박종훈의 지식한방) [4] 발명도둑잡기갤로그로 이동합니다. 07.16 55 0
2872166 대만아이돌 첫 한국행 GENBLUE (젠블루)-ACT LIKE THAT 발명도둑잡기갤로그로 이동합니다. 07.16 26 0
뉴스 윤민수X이예준, 오늘(17일) 듀엣곡 ‘결혼하지 못하는 이유’ 발매! 믿고 듣는 이별송 탄생! 디시트렌드 07.17
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2