【发布时间】:2017-09-01 23:23:26
【问题描述】:
Nginx 似乎有一个名为ngx_random 的内置函数,它在源代码的various places 中使用。但似乎只是定义为:#define ngx_random random
如果我理解正确,这意味着 Nginx 调用 ngx_random() 的所有地方都只是调用(在 Linux 平台上)random()。从doc 来看,我不清楚它是否保证以任何方式在给定范围内均匀分布,我怀疑它类似于 rand(),它是not uniform at all,并且只有在范围内才会是均匀的n 可以被 RAND_MAX 整除。
但是使用ngx_random 的好处是我相信系统会在启动期间自动处理播种。而如果我想在我的范围内使用真正统一的东西,比如drand48,我相信必须在ngx_posix_init.c 中的以下内容之后添加一个新行?
srandom(((unsigned) ngx_pid << 16) ^ tp->sec ^ tp->msec);
srand48(((unsigned) ngx_pid << 16) ^ tp->sec ^ tp->msec); //Added so that I can use drand48
那么我对ngx_random 的假设是否正确?如果我想在各个模块的任何地方使用drand48,以上是唯一的方法吗?
【问题讨论】: