디시인사이드 갤러리

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

갤러리 본문 영역

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

루비갤로그로 이동합니다. 2025.07.16 00:39:29
조회 50 추천 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 - -
공지 프로그래밍 갤러리 이용 안내 [88] 운영자 20.09.28 45586 65
2872718 틱톡에 태이,우아 떡방 올라옴ㅋ 짤리기전에 봐라 ㄱㄱ 프갤러(1.231) 00:43 2 0
2872717 칠만원 ㄹㅇ 놓치지 마셈 프갤러(106.101) 00:33 6 0
2872715 내가치킨 안먹는이유 (너희들 공감하냐?) 프갤러(121.139) 00:27 12 0
2872713 배달음식 김치찌개로 정햇다. [1] 프갤러(121.139) 00:10 20 0
2872709 더불어민주당 갤러리에 올렸다가 검열 삭제당한 기사 발명도둑잡기갤로그로 이동합니다. 07.18 15 0
2872708 장하준 경제학자: 미국이 중국 경쟁자를 밀어내기엔 너무 늦었다 [1] 발명도둑잡기갤로그로 이동합니다. 07.18 18 0
2872707 [참고물] AI 시대에서 바뀔 업무의 구조와 전문성의 업무능력.. [1] +abcd3421갤로그로 이동합니다. 07.18 24 0
2872706 엎드려서 살지마라 [2] 노력갤로그로 이동합니다. 07.18 32 0
2872705 깃헙같은거 의미 없응 ㅇㅇ(175.197) 07.18 32 0
2872704 원래 노트북 용량에 부족함을 느껴본 적이 없었는데 ㅇㅇ갤로그로 이동합니다. 07.18 20 0
2872702 [장하준 런던대교수] “주주가치 극대화? 보잉과 GM의 몰락을 보라” 발명도둑잡기갤로그로 이동합니다. 07.18 32 0
2872700 좆됨 자꾸 면접에 내보내려는거같은디 프갤러(106.102) 07.18 35 0
2872699 흐음.. 딱케이(58.225) 07.18 26 0
2872698 나님 내일 신상 털리면 어카징..? [2] ♥냥덩이의고독♥갤로그로 이동합니다. 07.18 47 0
2872696 블랙박스인 군대, 정보기관의 구조적 비리, 무인기 외환죄 발명도둑잡기갤로그로 이동합니다. 07.18 13 0
2872691 AI 슈퍼스타 연봉 1300억…실리콘밸리의 '두뇌' 전쟁 발명도둑잡기갤로그로 이동합니다. 07.18 16 0
2872690 허이호이 딱쓰(58.225) 07.18 25 0
2872689 프랑스서 ‘41년 구금’ 레바논 공산주의 활동가 석방 발명도둑잡기갤로그로 이동합니다. 07.18 20 0
2872687 아흐 [1] 루도그담등(118.235) 07.18 35 0
2872686 김문수, 여학생 팔뚝을 주물러..."성추행 아니냐" 논란 발명도둑잡기갤로그로 이동합니다. 07.18 18 0
2872685 나님 내일 출현 장소⭐ 냥로롱을 찾아보세양❤ [1] ♥냥덩이의고독♥갤로그로 이동합니다. 07.18 36 0
2872684 히힛 딱콩(58.225) 07.18 28 0
2872683 21년 만에 광주 지하철 대란…역대급 폭우·2호선 공사 '주범 지목' 발명도둑잡기갤로그로 이동합니다. 07.18 17 0
2872682 글고보니 애널 나님 야하면서 무서운꿈 꿍.. ♥냥덩이의고독♥갤로그로 이동합니다. 07.18 24 0
2872681 조선 왕의 하루 시간표 발명도둑잡기갤로그로 이동합니다. 07.18 25 0
2872680 나님 이슬만 먹구 살랭 [2] ♥냥덩이의고독♥갤로그로 이동합니다. 07.18 36 0
2872678 나치 스파이였고 유대인 혐오하던 샤넬 발명도둑잡기갤로그로 이동합니다. 07.18 13 0
2872677 막코더행님 좆본 생활은 할만 하십니까 ㅆㅇㅆ(124.216) 07.18 19 0
2872675 나님 사이다 프로젝트 인중❤+ ♥냥덩이의고독♥갤로그로 이동합니다. 07.18 28 0
2872674 하버드 교수가 풀어본 한국 수능영어 발명도둑잡기갤로그로 이동합니다. 07.18 18 0
2872673 휴.. 다 끝냤당 이제 주무실 중비 ♥냥덩이의고독♥갤로그로 이동합니다. 07.18 22 0
2872671 나님 눈 앞에 번개 떨어지는거 본적있웅 ♥냥덩이의고독♥갤로그로 이동합니다. 07.18 23 0
2872669 [더 러닝 맨] 1차 예고편 발명도둑잡기갤로그로 이동합니다. 07.18 16 0
2872668 프갤보면 ㄹㅇ 국제사회감각 떨어지는게 눈에 보임 ♥냥덩이의고독♥갤로그로 이동합니다. 07.18 34 0
2872667 [전지적 독자 시점] 메인 예고편 발명도둑잡기갤로그로 이동합니다. 07.18 39 0
2872666 님덜 34살 고졸 자바 국비 왜 취업 안되나요 [10] 프갤러(118.235) 07.18 107 2
2872664 나한텐 지능 낮은 새끼가 붙는 마법이 있나 [4] ㅆㅇㅆ(124.216) 07.18 56 0
2872663 주름 없눈 폴더불 탐 나넹 ♥냥덩이의고독♥갤로그로 이동합니다. 07.18 17 0
2872662 요즘 비 좀 내리니까 모기새끼들 기어나오넹 ♥냥덩이의고독♥갤로그로 이동합니다. 07.18 22 0
2872661 알고있다는 착각 ♥냥덩이의고독♥갤로그로 이동합니다. 07.18 28 0
2872660 병신이냐 책을 정보로만 보냐 책은 맥락을 모아놔서 보는거야 [10] ㅆㅇㅆ(124.216) 07.18 90 0
2872659 진짜 내 전공버리고 다른거 찾아야하나? [1] 백고기(119.192) 07.18 57 0
2872658 책읽는 사람이 가장 병신임 [3] 프갤러(121.139) 07.18 60 0
2872657 흠.. ♥냥덩이의고독♥갤로그로 이동합니다. 07.18 19 0
2872656 흠.. 내년 진행사항이 어케될지 감이 잘 안 잡히네 ♥냥덩이의고독♥갤로그로 이동합니다. 07.18 20 0
2872655 오늘도 프로그래밍 책 한권 다 읽었다 [3] ㅆㅇㅆ(124.216) 07.18 47 0
2872654 대기업 si 별거 없네... [1] ㅇㅇ(223.38) 07.18 35 0
2872653 악마 편이었다가 하나님의 편으로 돌아선 캐릭터 발명도둑잡기갤로그로 이동합니다. 07.18 18 0
2872652 [대한민국] 댓글 알바생이 간첩인지 아닌지 구분하는 방법 프갤러(121.172) 07.18 28 1
뉴스 빅뱅 대성, 호주 멜버른 콘서트 취소 "기술 관련 문제" 디시트렌드 07.17
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2