gpt4 book ai didi

multithreading - 在流程外环境中,公寓 “live”是位于服务器端还是位于客户端?

转载 作者:行者123 更新时间:2023-12-03 13:21:17 26 4
gpt4 key购买 nike

我很难理解进程外环境中的COM公寓。
基本上我不明白为什么客户端需要调用CoInitializeEx在公寓中注册自己的线程。
我可以理解STA或MTA中的服务器线程和服务器线程使用的对象。但是我不明白为什么客户应该对此感到担忧。
每个文档/指南都说客户必须调用CoInitializeEx才能在公寓中进行注册。这是否意味着服务器会跟踪客户端的线程?
还是公寓数据也在客户端进程上分配?

最佳答案

驻留在进程外服务器中的COM对象实际上由两部分组成-服务器中的实现代码以及由编译器和COM运行时创建的RPC代理/ stub 代码。调用远程COM对象将转换为对本地代理对象的调用,然后该本地代理对象使用某种RPC机制编码(marshal)并将该调用作为消息传输到服务器进程。该消息由服务器中的 stub 选择,然后该 stub 调用实际的COM对象,并将结果编码(marshal)回代理,然后代理将其编码(marshal),然后将其返回给调用客户端的代码。从客户端和COM对象的角度来看,所有调用都是本地的,即使DCOM也是通过网络进行的。

现在,客户端中的代理的行为就像一个普通的COM对象,它必须驻留在某种类型的单元中。服务器中的COM对象也驻留在其自己的单元中。 COM允许客户端和服务器具有不同的线程模型并处理适当的同步化(当两个互操作的代码段位于不同的进程中时,这很容易实现)。

我建议您阅读MSDN上COM指南的Process, Thread, and Apartments部分,以更好地了解哪个是什么以及如何将它们互连。

关于multithreading - 在流程外环境中,公寓 “live”是位于服务器端还是位于客户端?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10757659/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com