Compartir a través de


Clientes multiproceso y identificadores de contexto

Cuando tiene un cliente multiproceso donde varios subprocesos usan la misma instancia de identificador de contexto, el acceso a la instancia de identificador de contexto se serializa en el servidor de forma predeterminada. Esto evita que el administrador del servidor tenga que protegerse contra otro subproceso del mismo cliente que cambia el contexto o el contexto que se ejecuta mientras se envía una llamada. Sin embargo, en ciertos casos, la serialización puede afectar al rendimiento.

Tenga en cuenta lo siguiente: dos subprocesos de cliente invocan una llamada a procedimiento remoto que no cambia el estado del contexto (por ejemplo, la llamada simplemente obtiene algunos valores de él). No es necesario serializar estas llamadas.

En tales situaciones, Windows XP ofrece un modelo de serialización de modo mixto, donde cada método puede declararse para tener acceso exclusivo o compartido a un identificador de contexto. Consulte context_handle_serialize y context_handle_noserialize para obtener más información.

En versiones de Windows anteriores a Windows XP, el único medio de permitir el acceso simultáneo a un identificador de contexto es llamar a la función RpcSsDontSerializeContext para permitir que se envíen varias llamadas en un solo identificador de contexto. Llamar a la función RpcSsDontSerializeContext no deshabilita completamente la serialización; cuando se produce una ejecución de contexto, la rutina de ejecución de contexto solo se ejecuta cuando se han completado todas las solicitudes de cliente pendientes. Una llamada a RpcScDontSerializeContext afecta a todo el proceso y no es revertible. No se recomienda usar RpcScDontSerializeContext en Windows XP y versiones posteriores; hace que el código de servidor sea muy complicado cuando se trabaja de forma confiable con condiciones de carrera inherentes a entornos completamente no serializados.