안녕하세요 프로세스 간 객체를 공유하고 싶은데요
protobuf 방법으 찾아봤는데 지금 공유하려는 객체가 단순 데이터가 아닌 스레드도 구동중이고 데이터도 담고있는 힙에 할단된 객체인데요
객체안에 컨테이너나, 동적으로 할단된게 있으면 protobuf로 직렬화를 해도 공유할수 없다고 하는데요
이를 공유할 수 있는 방법이 있을까요?
....없어요
말씀하신데로 공유할 수 있는 방법이 없는거 같네요ㅜ
방법의 좋고 나쁘고를 떠나서 가장 쉬운 방법은 DB를 이용하는 것 같네요.
더구나 DB만 정해지면 표준 인터페이스도 정해지고, 이식도 매우 쉬워지겠죠.
외부 의존성없이 직접 구현하시려면 IPC 특히 공유 메모리 쪽 보시면 도움 될 것 같네요.
http://www.joinc.co.kr/w/Site/system_programing/IPC/SharedMemory
객체 안에 컨테이너랑, 스레드등이 있어서 DB도 안될거같네요..
같은 머신이라면 두 프로세스간에 공유메모리 만들고 그안에 생성하면 됩니다. 여기에 더해서 두 프로세스의 객체 멤버 메소드들이 같아야 합니다.
보통 C++로 컴파일된 프로그램들은 멤버변수들의 구조체만을 C++ 객체 데이터로 넣어두고 멤버 메소드들은 멤버변수 구조체를 인수로 받는 함수 형태로 프로그램 코드에 들어가 있습니다.
다른 머신이라면 뭐 해도 안됩니다. 객체를 직렬화에서 소켓으로 쏘고 받아 복원하기를 반복해서 공유할수 있지만 이건 공유가 아니라 복사고, 멤버 변수들이 수정될때마다 이걸 하기에는 너무 낭비가 큽니다. 필요한 데이터만 그때그때 주고받는게 나을겁니다.
Written By the Black Knight of Destruction
객체안에 컨테이너랑, 스레드등이 있어서 공유가 불가능하네요..
그렇게 엄청 복잡하고 큰 객체일 경우
프록시 객체(디자인패턴, 프록시 패턴) 혹은 RPC(Remote Procedure Call)로 구현하면 됩니다.
RPC 관련 라이브러리로는 Dbus가 있습니다.
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
..
객체안에 컨테이너나, 동적으로 할단된게 있으면
protobuf로 직렬화를 해도 공유할수 없다고 하는데요
....없어요
답변 감사합니다
말씀하신데로 공유할 수 있는 방법이 없는거 같네요ㅜ
방법의 좋고 나쁘고를 떠나서
방법의 좋고 나쁘고를 떠나서 가장 쉬운 방법은 DB를 이용하는 것 같네요.
더구나 DB만 정해지면 표준 인터페이스도 정해지고, 이식도 매우 쉬워지겠죠.
외부 의존성없이 직접 구현하시려면 IPC 특히 공유 메모리 쪽 보시면 도움 될 것 같네요.
http://www.joinc.co.kr/w/Site/system_programing/IPC/SharedMemory
답변 감사드립니다
객체 안에 컨테이너랑, 스레드등이 있어서 DB도 안될거같네요..
같은 머신이라면 두 프로세스간에 공유메모리 만들고
같은 머신이라면 두 프로세스간에 공유메모리 만들고 그안에 생성하면 됩니다.
여기에 더해서 두 프로세스의 객체 멤버 메소드들이 같아야 합니다.
보통 C++로 컴파일된 프로그램들은 멤버변수들의 구조체만을 C++ 객체 데이터로 넣어두고 멤버 메소드들은 멤버변수 구조체를 인수로 받는 함수 형태로 프로그램 코드에 들어가 있습니다.
다른 머신이라면 뭐 해도 안됩니다. 객체를 직렬화에서 소켓으로 쏘고 받아 복원하기를 반복해서 공유할수 있지만 이건 공유가 아니라 복사고, 멤버 변수들이 수정될때마다 이걸 하기에는 너무 낭비가 큽니다. 필요한 데이터만 그때그때 주고받는게 나을겁니다.
Written By the Black Knight of Destruction
답변 감사드립니다.
객체안에 컨테이너랑, 스레드등이 있어서 공유가 불가능하네요..
그렇게 엄청 복잡하고 큰 객체일 경우
그렇게 엄청 복잡하고 큰 객체일 경우
프록시 객체(디자인패턴, 프록시 패턴) 혹은 RPC(Remote Procedure Call)로 구현하면 됩니다.
RPC 관련 라이브러리로는 Dbus가 있습니다.
댓글 달기