비동기 데이터 전달 라이브러리 설계
글쓴이: dcmru / 작성시간: 화, 2014/03/18 - 6:50오후
안녕하세요.
라이브러리를 하나 만들고 있습니다.
라이브러리에 저장된 데이터를 어떻게 식별하고 리턴할지 의문이 들어서 질문을 드려봅니다.
방식은 의사코드로 설명을 드리면 Init()->반복적 DoFunc()->GetResult()->Free()의 순으로 실행을 하되,
라이브러리를 call하는 프로그램은 여러 스레드에서 각각 따로 실행을 하여 각각 결과를 리턴 받으려고 합니다.
쉽게 드는 생각은 함수를 실행할 때 식별자 전달하여 라이브러리에서 관리를 하면 어떨까하는데요.
어떤 방법론으로 접근을 해야 하는지 도움말 또는 키워드를 부탁 드립니다.
감사합니다.
Forums:
각각의 쓰레드가 호출한 결과를 쓰레드가 각자 받아야
각각의 쓰레드가 호출한 결과를 쓰레드가 각자 받아야 한다면 왜 비동기식으로 만드시나요?
라이브러리를 어떤 쓰레드가 실행하게 되는지 등등의 설명이나 예제 코드 없이는 답변하기 힘들 것 같습니다.
제목을 비동기식으로 명명하여서 혼선이 있는 것
제목을 비동기식으로 명명하여서 혼선이 있는 것 같습니다.
제가 원하는 형태의 구조는 라이브러리를 호출하는 각각 스레드에서 위의 함수 사이클을 실행하게 되었을 때
라이브러리 내의 함수는 같은 함수들을 사용하기 때문에 라이브러리를 호출하는 각 스레드에서 전달하는 데이터와 결과는 라이브러리 내에서 구분이 되어야 합니다.
이런 구조로 설계를 생각을 했습니다만 이와 같은 유사한 구조 또는 다른 방법이 있는지 문의를 드리는 것입니다.
노력만이 살길이다.
생각하시는게 맞는 것 같네요.
API들이 사실 상당수가 이런 식이죠. 소켓만 봐도 그렇지 않습니까? 식별자별로 내부 오브젝트가 관리되고 사용 종료 명령이 떨어지면 해당 식별자와 관련된 오브젝트를 폐기하는..
thread safe만 잘 감안하고 설계하시면 별 문제 없을 것 같네요
--
답변 감사드립니다.라이브러리를 thread
답변 감사드립니다.
라이브러리를 thread safety와 reenterence를 감안한다고 하였을 때 라이브러리 내부에서 각 데이터를 구분하는 방법은 무엇이 있을까요?
식별자를 구분하는데 어떤방법으로 사용할지 그리고 식별자와 데이터의 관리는 어떤 자료구조를 이용할지 조언 부탁 드립니다.
혹은 참고할만한 이와 같은 구조의 오픈소스의 라이브러리가 있다면 소개 부탁 드립니다.
노력만이 살길이다.
일단 서로 같은 것을 말하고 있다는 가정하에..
자료구조는 어차피 레퍼런스만 남으면 되니까 어떤 것을 사용하든 크게 중요치 않다 생각합니다. 프로젝트 특성에 맞는 것을 고르면 되고 그냥 일반 구조체를 사용하더라도 손색이 없습니다. 물론 구조체 말고도 클래스 인스턴스라든지 데이터베이스 키 등등 뭐가 됐든 상관이 없습니다. 클라이언트에게 넘겨주는 ID나 주소 값 한개만으로 해당 오브젝트를 찾아갈 수 있기만 하면 됩니다.
간단한 예를 찾아봤는데 https://github.com/ynezz/librs232/tree/master/src 이게 도움이 될 것 같네요. 시리얼 통신 라이브러리인데, rs232_windows를 보시면 딱 전형적인 형태를 가지고 있습니다. rs232_init 펑션이 내부 오브젝트 생성 및 초기화를 한 뒤 포인터값을 리턴하고, 다른 i/o펑션들은 그 오브젝트 포인터를 항상 취하며(ID역할), rs232_end 펑션은 해당 ID를 해제하고 관련 오브젝트를 반납하고 있네요. 이게 딱 전형적인 형태입니다. 단, 이 예제의 경우 스레드간 공유되는 자원을 사용하지 않기 때문에 multithread safe 관련된 내용은 구현이 돼있지 않은 듯 합니다 (또는 하부 소스코드에 숨겨져 있는지도 모릅니다).
--
말씀하신대로 IO 함수마다 구조체를 넘기도록 되어
말씀하신대로 IO 함수마다 구조체를 넘기도록 되어 있군요.
제가 만드려는 라이브러리 구조에 응용할 수 있을 것 같습니다.
좋은 예제 감사드립니다.
노력만이 살길이다.
댓글 달기