Programing

마샬링이란 무엇입니까?

lottogame 2020. 11. 11. 07:50
반응형

마샬링이란 무엇입니까? 무언가가 "정렬"되면 무슨 일이 일어나고 있습니까?


나는 적어도 여기 에서이 질문을 받았다는 것을 알고 있다 .

그러나 적어도 나에게는 만족스러운 대답이 없었습니다. 관리되지 않는 코드와의 상호 운용과 관련하여 마샬링에 대해 많은 이야기가 있지만 때때로 .NET에서해야하는 것처럼 한 스레드에서 다른 스레드로 마샬링하는 것은 어떻습니까?

이것은 마샬링이 무엇인지 물어 보게합니다. 마샬링의 정의를 제공 할 때 스레드간에 "마샬링"하는 경우뿐만 아니라 상호 운용성의 경우를 설명하도록 어떻게 정의 하시겠습니까?


계산은 종종 한 사이트에서 다른 사이트로 데이터를 이동해야하며 공유 메모리가 없습니다. 따라서 한 계산은 데이터가 포함 된 메시지를 다른 계산으로 보냅니다.

데이터가 임의로 복잡하다면 어떻게 메시지로 보내야합니까?

마샬링은 데이터 필드 또는 전체 관련 구조 집합을 메시지로 보낼 수있는 직렬화 된 문자열로 변환하는 프로세스입니다. 이진수를 마샬링하기 위해 메시지 형식이 텍스트 여야하는 경우 16 진수 문자열로 변환 할 수 있습니다. 메시지가 이진 데이터를 전달하는 경우 이진수는 4 개의 리틀 엔디안 정규화 된 이진 바이트로 변환되어 전송 될 수 있습니다. 포인터는 더 어렵습니다. 종종 실제 메모리 위치와 무관 한 추상 참조 (예 : "노드 번호")로 변환해야합니다.

물론 데이터를 "마샬링"하는 경우 결국 직렬 스트림을 읽고 전송 된 데이터 (구조)를 재구성하는 프로세스 인 "마샬링 해제"해야합니다.

종종 이러한 목적을 달성하기 위해 사용되는 라이브러리에 (un) 마샬링 루틴이 있으며, 때로는 데이터를 전송 / 수신하기 위해 (un) 마샬링 루틴에 필요한 모든 호출을 제조하는 도구도 있습니다.


마샬링은 어떤 형식의 데이터를 가져 와서 별도의 형식으로 변환하는 것입니다. 매우 일반적인 용어이며 의미에 미묘한 차이가있는 여러 곳에서 사용됩니다.

예를 들어 .NET에서 네이티브 형식으로 작업 할 때 interop 계층은 .NET 형식의 데이터를 적절한 형식으로 "마샬링"하여 네이티브 메서드를 호출 한 다음 결과를 다시 "마샬링"합니다.

스레드 간의 "마샬링"과 관련하여-종종 현재 스레드와 다른 스레드에서 실행되는 코드가 있어야합니다. 예를 들어 Windows Forms를 사용하는 경우 스레드 풀 스레드에서 UI 요소를 변경할 수 없으므로 UI ​​스레드로 다시 호출을 "마샬링"해야합니다. 이는 델리게이트를 생성하고 Control.Invoke를 통해 사용자 인터페이스 스레드에 델리게이트를 다시 전달하여 수행되며 (이는 적절한 동기화 컨텍스트에이를 다시 게시하기 위해 다소 복잡한 시스템을 사용함), 차례로 사용자 인터페이스에서 델리게이트를 실행합니다. 당신을 위해 스레드.


Wikipedia의 정의는 실제로 꽤 좋습니다.

마샬링의 전체 개념은 "직렬화"와 동일합니다. 메모리 내 표현 (어떤면에서는 전혀 표현이없는 것과 같습니다. 메모리에 무언가가있을 때 단순히 "존재")에서 "하드 카피"로 이동하는 것과 같습니다. "표현, 그것이 XML이든 바이너리 스트림이든 상관 없습니다. 그러나 수행중인 작업에 따라 일종의 변환 또는 대상 형식으로의 변환을 의미 할 수도 있습니다.

프로세스 마샬링의 경우 : 한 스레드가 단순히 다른 스레드를 "호출"하는 것이 아니라 데이터를 패키지화하여 한 스레드에서 다른 스레드로 "전송"해야합니다. 마샬링은 해당 데이터 (예 : 호출하려는 메서드에 대한 데이터 및 해당 매개 변수)를 패키징하는 프로세스입니다.

interop 측면에서 마샬링하는 경우 메서드 호출과 해당 매개 변수를 COM 구성 요소를 실행하는 프로세스 / 스레드로 보낼 수있는 데이터 구조로 패키징합니다. 이 패키지는 COM 구성 요소가 이해할 수있는 형식이어야합니다.


에서 마샬링 (컴퓨터 과학) - 위키 백과 :

마샬링 (직렬화와 유사)은 객체의 메모리 표현을 저장 또는 전송에 적합한 데이터 형식으로 변환하는 프로세스입니다. 일반적으로 데이터를 컴퓨터 프로그램의 다른 부분간에 또는 한 프로그램에서 다른 프로그램으로 이동해야 할 때 사용됩니다.

.NET에서 관리되지 않는 함수를 호출하는 경우 마샬링을 사용하여 .NET의 데이터를 관리되지 않는 함수가 사용할 수있는 데이터로 변환합니다. 예를 들어 System.String는 유니 코드 기반이지만 관리되지 않는 C 함수로 전달하려면 해당 문자열을 ANSI 문자열로 변환해야 할 수 있습니다.

스레딩의 경우 마샬링은 일반적으로 일부 데이터의 소유권을 한 스레드에서 다른 스레드로 이전하는 것을 의미합니다. 예를 들어, 프로그램에는 두 개의 스레드가 있습니다. 첫 번째 스레드는 네트워크에서 데이터를 읽고 두 번째 스레드는 해당 데이터를 계산합니다. 네트워크 스레드가 일부 데이터를 읽은 후 처리 할 계산 스레드로 데이터를 전송 (즉, "마샬링")합니다. 두 스레드간에 공유되는 큐에 데이터를 기록하여이를 수행 할 수 있습니다.

스레딩의 마샬링에는 거의 항상 마샬링되는 데이터의 동기화가 포함됩니다.


마샬링을 이해하는 방식은 다양한 운영 환경에서 일관된 방식으로 데이터를 전송할 수있는 방법을 제공한다는 것입니다.

관리 코드에서 비 관리 코드로 데이터를 마샬링하는 맥락에서 보면 거의 동일합니다.

정수 배열 또는 선택한 데이터 유형과 같은 일부 데이터가 있으며 C ++ 코드에서 일부 작업을 수행 한 후 C # 코드 내에서 사용할 수 있도록 만들고 싶습니다.

C # 코드에 "어이, 여기가 배열이있는 곳입니다. 원하는 작업을 수행하십시오"라고 말할 수는 없습니다. C ++의 int 배열은 C #에서와 같은 방식으로 저장되지 않을 수 있습니다. 마샬링을 통해 양측이 동일한 방식으로 데이터를 볼 수 있도록 환경 독립적 인 방식으로이 데이터를 전송하겠습니다.

또 다른 예는 네트워킹입니다. 일반적으로이 마샬링을 호출하지 않지만 네트워크를 통해 전송하려는 경우 일반적으로 수신하는 사람이 데이터를 동일한 방식으로 해석하는 방식으로 전송해야합니다. 컴퓨터는 리틀 엔디안 순서로 데이터를 나타낼 수 있고 다른 컴퓨터는 빅 엔디안 순서로 데이터를 나타낼 수 있습니다.

tl; dr : Marshaling은 다양한 운영 환경에서 데이터를 일관되게 표현하는 방법을 제공합니다.


일반적으로 "XML 형식으로 작성"이라는 컨텍스트에서 사용되지만 모든 형식으로 마샬링 될 수 있습니다.

2.  To arrange, place, or set in methodical order.
   (from American Heritage® Dictionary of the English Language)

따라서 원하는 체계적인 순서 / 형식으로 데이터를 배열하고 있음을 의미합니다. 종종 이것은 XML 형식입니다.

참고 URL : https://stackoverflow.com/questions/5600761/what-is-marshalling-what-is-happening-when-something-is-marshalled

반응형