디시인사이드 갤러리

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

갤러리 본문 영역

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

루비갤로그로 이동합니다. 2025.07.16 00:39:29
조회 68 추천 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 - -
AD 곧 휴가!! 홈캉스, 바캉스 SALE 운영자 25/07/21 - -
2873632 CJ ENM 제작 ‘부고니아’, 베니스영화제 경쟁 부문 초청 발명도둑잡기갤로그로 이동합니다. 07.22 25 0
2873631 메일 왜이렇게 쏴재끼는거야 [6] 개멍청한유라갤로그로 이동합니다. 07.22 66 0
2873630 출근하기싫어 [4] 개멍청한유라갤로그로 이동합니다. 07.22 52 0
2873629 [어쩔수가없다] 티저 예고편 발명도둑잡기갤로그로 이동합니다. 07.22 38 0
2873628 애초에 절대 다수의 구현문제는 프레임워크로 해결된거고 ㅆㅇㅆ(124.216) 07.22 36 0
2873626 사실 이런말하면 좀 그렇지만 리처드 파인만도 수식은 도구라고함. ㅆㅇㅆ(124.216) 07.22 45 0
2873623 작업창 프로그램이 그리드 프로그램인지 확인 어떻게함? [1] ㅇㅇ(106.244) 07.22 48 0
2873622 근데 사실 과학에서 굉장히 중요한게 과학 역사긴함 [2] ㅆㅇㅆ(124.216) 07.22 53 0
2873621 나 그냥 쉬었음 청년인데 [1] 프갤러(211.202) 07.22 59 0
2873619 못 사는 사람들이 윤석열 많이 지지한다 발명도둑잡기갤로그로 이동합니다. 07.22 35 0
2873618 오늘 조카봤더니 기분이 좋습니다 [8] 루도그담당(58.239) 07.22 73 0
2873617 코드 쓰는거 틈틈이 연습 안해두면 코드 쓰는법 잊더라 [5] ㅆㅇㅆ(124.216) 07.22 62 0
2873616 야구 미쳤넹 ♥삣삐냥덩♥갤로그로 이동합니다. 07.22 31 0
2873615 "적법절차의 원리? '빠루 재판'도 원칙따라 진행될 것" 발명도둑잡기갤로그로 이동합니다. 07.22 37 0
2873614 앱 기획 하려구 디자인 시스템부터 만들어 봤는데 [3] 따1당(106.101) 07.22 57 0
2873613 과학책도 그렇지 않나 [2] ㅇㅇ갤로그로 이동합니다. 07.22 57 1
2873612 애널두 수고했어양❤+ [3] ♥삣삐냥덩♥갤로그로 이동합니다. 07.22 55 0
2873611 주술회전 후속작?!? ♥삣삐냥덩♥갤로그로 이동합니다. 07.22 42 0
2873609 나중에 시간 나면 REST API를 역사나 적어봐야겠다 [2] ㅆㅇㅆ(124.216) 07.22 54 0
2873608 이제 소화되서 트림나오넹 ♥삣삐냥덩♥갤로그로 이동합니다. 07.22 20 0
2873607 근데 바이비트, 바이낸스 이런 애들은 예제가 부족해서 ㅆㅇㅆ(124.216) 07.22 35 0
2873606 [고급] 정보화에 대해서- 프갤러(121.172) 07.22 55 1
2873605 근데 한국 투자증권 여기 문서 쓰는 사람 진짜 대단하지 않냐. [2] ㅆㅇㅆ(124.216) 07.22 57 0
2873604 나님 매일 자기전에 내일 할거 마인드트레이닝함 ♥삣삐냥덩♥갤로그로 이동합니다. 07.22 23 0
2873603 노드 5년차인데 인생 망한 것 같다 [2] 프갤러(211.234) 07.22 75 0
2873602 크몽에 php의뢰 존나많이들어옴 프갤러(211.235) 07.22 56 0
2873600 우킷낏낏끽끼! 통암기원숭이(61.253) 07.22 39 0
2873599 개인적으로 마갤 비선호하는게 뭐냐면 마갤은 개선되는게 아니라 개악이됨 [3] ㅆㅇㅆ(124.216) 07.22 49 0
2873597 여긴 대피소 없어? [4] 프갤러(221.165) 07.22 51 0
2873595 프갤에 음란물 올리지 마라 나르시갤로그로 이동합니다. 07.22 42 1
2873594 내일 중으로 cada 버전업 가능할 듯 ㅋㅋ [5] 나르시갤로그로 이동합니다. 07.22 49 0
2873593 어휴 짜증나.. ㅠㅠ 나르시갤로그로 이동합니다. 07.22 35 0
2873590 ㅅㅂ 못참겠당.. ♥삣삐냥덩♥갤로그로 이동합니다. 07.22 52 0
2873589 어머니 지원금 받은거로 소고기 사와서 어머니랑 저녁먹었는데 [3] ㅆㅇㅆ(124.216) 07.22 76 1
2873588 스테이블 코인 말하는 놈이 권도형도 모르더라- 프갤러(121.172) 07.22 48 0
2873587 애초에 국비수준이 깃허브 하는놈만드는게아니라 ㅇㅇ(223.38) 07.22 89 0
2873584 흠흠.. [1] 딱찍(61.253) 07.22 47 0
2873582 7시인데 대낮 실하노 [2] 헬마스터갤로그로 이동합니다. 07.22 48 0
2873581 게이물인줄알고 걸렀는데 잼나보이넹 ♥삣삐냥덩♥갤로그로 이동합니다. 07.22 44 0
2873580 세상에 지 시간만 소중하고 남의 시간은 안 소중한 정신병자 개많은 듯 [8] ㅇㅇ갤로그로 이동합니다. 07.22 75 0
2873579 2찢명은 하는짓이 너무 짜쳐서 안 놀릴레야 안 놀릴수가 없음 ㅋㅅㅋ ♥삣삐냥덩♥갤로그로 이동합니다. 07.22 34 0
2873578 ? ㅅ ? ♥삣삐냥덩♥갤로그로 이동합니다. 07.22 25 0
2873577 선언적 프로그래밍이 지피티가 잘짬 [2] ㅆㅇㅆ(124.216) 07.22 54 0
2873575 졸리.. 졸리.. ♥삣삐냥덩♥갤로그로 이동합니다. 07.22 22 0
2873574 뷰 진짜 다 좋은데 LLM 개소리좀 못막나 [6] 거북이속이거북갤로그로 이동합니다. 07.22 78 0
2873573 회전율 느리면 좆같드라 식당은 [3] 루도그담당(118.235) 07.22 57 0
2873572 개발자 분들의 의견이 궁금합니다! 프갤러(218.152) 07.22 54 0
2873571 식당을 해본 사람으로썬 오래 있는 사람이 나음. [6] ㅆㅇㅆ(124.216) 07.22 80 0
2873570 다시 느끼지만 스벅 맥날에서 뭔가 하는 애들은 [10] 프갤러(221.155) 07.22 97 0
2873569 2찢명 자해선언? 국가재난상황에 희희낙락 먹방찍던놈이 누구더라~? ♥삣삐냥덩♥갤로그로 이동합니다. 07.22 42 0
뉴스 어센트(ASC2NT), 신곡 'DON'T MOVE' M/V 티저 공개! 성숙美+감각적 비주얼 디시트렌드 07.23
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2