2011-03-06 14 views
5

la documentación Erlang dice:¿Por qué se especificó erlang: now() de modo que puede sesgar la hora de un nodo?

Erlang: ahora()
[...] Está también garantiza que las llamadas posteriores a esta BIF rendimientos crecientes continuamente el valor. Por lo tanto, el valor de retorno de ahora() se puede usar para generar marcas de tiempo únicas, y si se llama en un bucle cerrado en una máquina rápida, el tiempo del nodo puede verse sesgado. [...]

Me parece un poco extraño (especialmente si se tiene en cuenta que la granularidad es de microsegundos). ¿Por qué se especificó de esta manera?

Respuesta

6

Porque se puede utilizar para generar números de marca de tiempo de manera única. El módulo os tiene una variante que no hace eso.

+4

Entonces, cuando dice "el tiempo del nodo puede estar sesgado", realmente significa que "el tiempo de ahora() puede estar sesgado"? – MatthewToday

+0

Eso es lo que entiendo. – natevw

+0

Sí, en función de este código fuente, es evidente que el reloj del sistema no se modifica cuando ocurre el sesgo, solo el estado interno de la VM Erlang se sesga un poco cuando es necesario: http://code.google.com/p/ erlang/source/browse/trunk/erts/emulator/beam/erl_time_sup.c? r = 88 # 662 (Este sesgo será temporal hasta que el reloj del sistema alcance la velocidad, es decir, si se inclina en un bucle cerrado, luego duerme, los resultados vuelve a la normalidad cuando lo verifique más tarde). – natevw

Cuestiones relacionadas