lua产生随机数
math.randomseed(os.time())
rand = math.random();
实际上我是遇到的是高并发web应用的情况下,比如秒杀场景,大家的时间都可能是相同的,随之带来的产生的随机数都是相同的,或者是接近的。
我在想是否可以利用Header里来做随机数的种子,比如IP之类,这样考虑是否合理?
感觉Lua处理随机数很蛋疼....
lua产生随机数
math.randomseed(os.time())
rand = math.random();
实际上我是遇到的是高并发web应用的情况下,比如秒杀场景,大家的时间都可能是相同的,随之带来的产生的随机数都是相同的,或者是接近的。
我在想是否可以利用Header里来做随机数的种子,比如IP之类,这样考虑是否合理?
感觉Lua处理随机数很蛋疼....
楼主随机数用法有点问题。设置随机数的seed表示初始的随机性,在楼主描述的场景下,math.randomseed(os.time())只用调用一次,例如在lua虚拟机启动时候调用一下,之后的每个请求只用rand = math.random();即可,默认生成0~1之间的浮点数。
lua的随机数生成算法是直接用的C运行时的rand函数,既线性同余法,优点是运算速度快,缺点是随机性有限制。
如果你需要更精确的的随机数算法可以考虑使用梅森旋转算法(http://en.m.wikipedia.org/wiki/Mersenne_twister),这里有一个lua实现(lrandom):http://webserver2.tecgraf.puc-rio.br/~lhf/ftp/lua/
所以别用
os.time()
当seed,给lua包装一个能获取毫秒/微秒的函数就好了。觉得逼格不够的话还可以从/dev/random
或者/dev/urandom
里面倒腾数据出来当seed。