디시인사이드 갤러리

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

갤러리 본문 영역

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

루비갤로그로 이동합니다. 2025.07.16 00:39:29
조회 70 추천 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/21 - -
2873816 나는 프갤애들이 재밌음 위키세카이(211.235) 07.23 87 0
2873815 러꽐라 / 러빨러가 되는 EU 나르시갤로그로 이동합니다. 07.23 43 0
2873814 보통 다중이 쳐걸렸으면 안 하지 않나? 염치가 씨발 있는 새낀지 ㅆㅇㅆ(124.216) 07.23 36 0
2873813 러스트가 c 대체 불간응한 EU 나르시갤로그로 이동합니다. 07.23 45 0
2873812 러스트가 개떡같은 EU 나르시갤로그로 이동합니다. 07.23 33 0
2873811 냥덩이 점마는 계속 따라다니면서 댓글로 지랄염병하네 ㅆㅇㅆ(124.216) 07.23 31 0
2873810 러빨러는 소스코드나 올리고 말하라 ㅋㅋ 나르시갤로그로 이동합니다. 07.23 28 0
2873808 러스트 못배우는 지능 가지고 신포도질 하느라 애쓴다. 프갤러(218.154) 07.23 28 0
2873807 걍 쿠폰에 이재명얼굴 박아서 전국에 우편물로 보내주지 헬마스터갤로그로 이동합니다. 07.23 35 0
2873806 러빨러 자살했냐 ?? [2] 나르시갤로그로 이동합니다. 07.23 49 0
2873805 니 죄명을 알라 나르시갤로그로 이동합니다. 07.23 27 0
2873804 차리리 전국민 15만원씩 면세를 해주던가 [1] 나르시갤로그로 이동합니다. 07.23 39 0
2873803 차라리 2000년대가 더 상위20%안에 드는 나라같지 지금은 뭔 뒷통수한방(1.213) 07.23 23 0
2873802 민생 쿠폰 한 1억은 줘야.. 나르시갤로그로 이동합니다. 07.23 25 0
2873801 민생 쿠폰 15만원 바껭 안주냐 [2] 나르시갤로그로 이동합니다. 07.23 38 0
2873800 확실히 코딩이 진짜 노력한만큼 보상받는듯 타이밍뒷통수한방(1.213) 07.23 40 0
2873799 재명쿠폰 생각보다 많이안쓸듯 [2] 헬마스터갤로그로 이동합니다. 07.23 50 0
2873798 ㅈ소에서 3년 숨 꾹참고 이직성공 ㅇㅇ(106.102) 07.23 26 0
2873797 러빨러 이제서야 러스트 공부하며 실망하는군 나르시갤로그로 이동합니다. 07.23 32 0
2873796 제3회 2025 네트워크 AI 해커톤 (~8/15) [1] 프갤러(14.32) 07.23 32 0
2873794 ai는 좇센 법치민주자유국가라고할때부터 수준알아봄 뒷통수한방(1.213) 07.23 27 0
2873793 Ada / SPARK 열번 공부해라. 니 운명이 바뀐다. 나르시갤로그로 이동합니다. 07.23 40 0
2873792 나님 담주까지 잠시 탈갤합니당 ㅇㅅㅇ ♥삣삐냥덩♥갤로그로 이동합니다. 07.23 28 0
2873791 러스트 할바에 Ada(에이다)해라. 두번 해라 나르시갤로그로 이동합니다. 07.23 29 0
2873790 AI전망을 현재기준으로 판단하는점이 재밌네 [2] 위키세카이(1.237) 07.23 135 0
2873789 "계엄은 하나님 계획"이라던 장동혁, 윤석열 파면 후 '침묵' 발명도둑잡기갤로그로 이동합니다. 07.23 31 0
2873788 스타벅스의 군대식 경영 발명도둑잡기갤로그로 이동합니다. 07.23 43 0
2873787 부힛 딱짱(211.235) 07.23 23 0
2873786 1년 동안 "쉬었음" 당한 후기 [1] 프갤러(116.43) 07.23 402 0
2873785 나님 실험 함 해봐야지 회복탄력성 ♥삣삐냥덩♥갤로그로 이동합니다. 07.23 29 0
2873784 ‘가장 미국적 브랜드’ 맥도날드, 불매 운동에 휘말린 이유 발명도둑잡기갤로그로 이동합니다. 07.23 38 0
2873783 ❤✨☀⭐⚡☘♥+나님 시작합니당♥+☘⚡⭐☀✨❤ ♥삣삐냥덩♥갤로그로 이동합니다. 07.23 26 0
2873782 이게 민주주의랑께 ♥삣삐냥덩♥갤로그로 이동합니다. 07.23 34 0
2873781 커피를 마셔도 사라지지 않아 ♥삣삐냥덩♥갤로그로 이동합니다. 07.23 27 0
2873780 “부자들 난교 파티에 불륜·협박까지”…전용기 승무원의 ‘충격’ 폭로 발명도둑잡기갤로그로 이동합니다. 07.23 37 0
2873779 차라리 2000년대가 더 상위20%안에 드는 나라같지 지금은 뭔 뒷통수한방(1.213) 07.23 33 0
2873778 "내 폰에 도청장치?"…뜬금없는 이 광고·콘텐츠 왜 뜰까 발명도둑잡기갤로그로 이동합니다. 07.23 19 0
2873777 션, 결혼 21년 ♥정혜영에 또 사랑 고백 발명도둑잡기갤로그로 이동합니다. 07.23 29 0
2873776 요즘 너무 피곤해서 함 쉬긴 쉬어야함 ♥삣삐냥덩♥갤로그로 이동합니다. 07.23 29 0
2873775 배구공 형님 왜케 호감이지 [4] 루도그담당(211.184) 07.23 65 0
2873774 프로그래밍에 가장 큰 원동력은 새 기술을 배우면 새로운걸 만들 수 있음 ㅆㅇㅆ(124.216) 07.23 49 0
2873773 여기 정치갤인가요 [2] upperCamelCase갤로그로 이동합니다. 07.23 55 0
2873772 프로그래밍이라는게 진짜 정신수양에 좋고 안정적임 [3] ㅆㅇㅆ(124.216) 07.23 94 0
2873771 코딩은 수단이당 ♥삣삐냥덩♥갤로그로 이동합니다. 07.23 46 0
2873770 이거 붙여야 된다. [2] 넥도리아(223.38) 07.23 46 0
2873769 코딩은 무조건 하지마셈 좇센에서 유일하게 맞는말은 내가한다 [1] 뒷통수한방(1.213) 07.23 57 0
2873768 코딩은 난 무조건 배우는거 추천함 [4] ㅆㅇㅆ(124.216) 07.23 74 0
2873767 ㄹㅇ 개좇같은 나라여 전세계83억 실험장좇집쓰레기장나라 뒷통수한방(1.213) 07.23 35 0
2873765 결국 Cada --> Clair 변경하기로 함. 나르시갤로그로 이동합니다. 07.23 36 0
2873764 코딩은 나같은 비전공도 할 수 있을만큼 쉽잖아 [5] ㅆㅇㅆ(124.216) 07.23 77 0
뉴스 '전참시' 28년 차 레전드 혼성그룹 코요태 첫 출격! 육아 난이도 上 두 아들 종민&빽가와 엄마 신지(?) '찰떡 케미' 디시트렌드 07.25
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2