COM 组件并发管理与接口封送处理详解
1. 单元与标准封送处理
1.1 跨单元访问与线程切换
跨单元访问 STA 或 MTA 对象时需要进行线程切换。当客户端和对象处于不同单元时,客户端会获得对象的代理。具体来说,客户端会得到一个代理管理器,为对象上查询的每个接口加载一个接口代理。当在接口代理上进行方法调用时,接口代理将参数信息封送到 ORPC 消息中,并通过 ORPC 通道将其发送到接口存根。接口存根接收 ORPC 消息,对其进行解封处理,并在对象上调用相应的接口方法。
1.2 ORPC 通道的传输协议
COM 在 ORPC 通道通信时,会根据导入(客户端)和导出(对象)单元的类型使用最有效的传输协议:
| 导入单元位置 | 传输协议 | 说明 |
| — | — | — |
| 不同主机 | RPC | 在导出单元的进程中启动一个 RPC 线程缓存,该缓存等待传入的连接请求。当请求到来时,会调度一个线程来处理请求,处理完成后线程返回缓存。 |
| 同一主机不同进程 | 轻量级 RPC (LRPC) | 是 RPC 的微软专有变体,具有与 DEC RPC 运行时相同的调用语法,但经过优化以减少数据复制并完全消除对网络代码的访问。 |
| 同一进程 | 直接使用调用者线程 | 可以绕过 RPC 线程缓存,直接使用调用者的线程来处理请求。 |
1.3 调用分发到 STA
- 不同主机的调用 :如果传入的调用来自不同主机,必须使用 RPC 线程缓存中的线程进行分发。但 STA 有自己的线程,其他线程不能进入现有的
超级会员免费看
订阅专栏 解锁全文
9017

被折叠的 条评论
为什么被折叠?



