2010-06-09 18 views

Respuesta

5

No, hay un número de serie en su interior que cambia para cada llamada, por lo que múltiples llamadas simultáneas en diferentes subprocesos en el mismo sistema no crearán Guiones duplicados.

Eso no significa que haya una parte visible del Guid que pueda ver incrementos para cada llamada.

+0

Sede, eso es lo que supuse, pero no he visto ninguna mención de 'número de serie dentro' en cualquier lugar - tienes una referencia? – billybum

+0

Lamentablemente, no tengo un enlace al artículo que leí que menciona este número de serie, pero si mira la documentación de UuidCreate, la función principal que produce Guids en Windows (http://msdn.microsoft.com/en -us/library/Aa379205), verás que dice que "El UUID está garantizado para ser exclusivo de esta computadora solamente". Obviamente no puede hacer tales garantías si no hay al menos una cosa que cambia para cada llamada. –

+0

Gracias, pero eso aún no es totalmente concluyente ... – billybum

0

La función NEWID de Transact-SQL y las funciones y los métodos de la API de la aplicación generan nuevos valores de identificador único a partir del número de identificación de su tarjeta de red más un número único del reloj de la CPU. Cada tarjeta de red tiene un número de identificación único. El valor del identificador único devuelto por NEWID se genera utilizando la tarjeta de red en el servidor. El valor del identificador único devuelto por las funciones y los métodos de API de la aplicación se genera utilizando la tarjeta de red en el cliente.

. No generará duplicados a tiempo o en cualquier PC según msdn.

0

A menos que sus subprocesos se ejecuten en diferentes núcleos en su máquina, solo un subproceso se ejecutará realmente en un momento determinado. Por lo tanto, no creo que sea muy probable que las llamadas a NewGuid() se realicen al mismo tiempo.

+0

No creo que el multinúcleo sea tan absurdo en estos días, así que diría que es una garantía de que el código de hoy se ejecutará en varios núcleos en algún momento. –

+0

Sí, pero normalmente un proceso se ejecuta solo en un único núcleo (porque los hilos comparten memoria y la transferencia de memoria entre núcleos que ejecutan diferentes hilos del mismo proceso es costosa).) Al menos, eso es lo que recuerdo de mi curso de SO un año atrás. Puedo estar equivocado en este punto. – apoorv020

+0

Para la localidad de caché, el planificador generalmente preferirá mantener los hilos de un proceso en el mismo núcleo (s). Pero esto no está garantizado. Los únicos hilos ejecutables pueden ser todos del mismo proceso. Esto es bastante común en aplicaciones de servidor. Independientemente de los caprichos del programador, podría tener GUIDs creados a partir de múltiples procesos simultáneamente. –

Cuestiones relacionadas