Como la generación de GUID depende del tiempo, si se llama al System.Guid.NewGuid() varias veces en el mismo instante en diferentes subprocesos, ¿podría devolver GUID idénticos?¿Podría esto causar varios GUID idénticos?
Respuesta
En Windows, los GUID (UUID) se crean a partir de un generador de números aleatorios criptográficos con UuidCreate. Son UUID de versión 4 en términos de RFC 4122. No hay marcas de tiempo ni tarjetas de ethernet involucradas, a menos que esté usando GUIDs de la versión 1 de la vieja escuela creados con UuidCreateSequential.
Ver también How Random is System.Guid.NewGuid()? (Take two)
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.
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.
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.
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. –
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
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. –
- 1. ¿Qué podría causar java.lang.reflect.InvocationTargetException?
- 2. Dropbox y git, ¿podría causar conflictos?
- 3. ¿Qué podría causar este error en Android?
- 4. Se están creando puertos serie virtuales USB duplicados. ¿Qué podría causar esto?
- 5. ¿Qué podría causar daños en la memoria en JavaScript?
- 6. ¿Qué podría causar una excepción ArgumentException al actualizar un PictureBox?
- 7. ¿Por qué _CrtSetBreakAlloc podría no causar un punto de interrupción?
- 8. ¿No debería esto causar un desbordamiento? ¡No lo hace!
- 9. ¿Es posible crear guids idénticos
- 10. ¿Qué podría causar el error "Debugging será abortado" en Visual Studio 2008?
- 11. ¿Podría declarar un ApplicationContext estático causar una pérdida de memoria? (Spring 3)
- 12. Cómo convertir guid? guid
- 13. ¿Qué podría causar el socket ConnectException: se agotó el tiempo de espera de la conexión?
- 14. Lo que podría causar el error de tiempo de ejecución Vb6 430
- 15. ¿Qué podría causar una función anónima UmbrellaException en la aplicación GWT desplegada?
- 16. En rails3/jruby, ¿qué podría causar este error de forma intermitente? SAVEPOINT active_record_1 no existe
- 17. ¿Qué podría causar la gran sobrecarga de hacer una llamada a HttpWebRequest?
- 18. ¿El siguiente patrón de cancelar su suscripción a un evento por cierre podría causar algún problema?
- 19. C#: Windows Forms: ¿Qué podría causar Invalidate() para no volver a dibujar?
- 20. ¿Qué podría causar problemas en las cookies de FormsAuthentication de ASP.NET aparte de las cookies desactivadas?
- 21. ¿Qué podría causar SIGSEGV al llamar a NewObjectArray para JNI en Android?
- 22. Convirtiendo un Guid a Nullable Guid
- 23. Cómo validar GUID es un GUID
- 24. jquery varios selectores que incluyen 'esto' - sintaxis mejor limpia
- 25. Cómo causar un punto muerto
- 26. ¿Cuándo se llama exactamente a Application_End y cómo puedo causar esto manualmente?
- 27. Referenciando GUID
- 28. Varios hilos que llaman a los mismos objetos funcionan simultáneamente. ¿Puede causar problemas?
- 29. Android: Clave principal GUID
- 30. ¿Qué puede causar java.lang.NoClassDefFoundError?
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
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. –
Gracias, pero eso aún no es totalmente concluyente ... – billybum