突然發現golang產生的隨機數並不是那麼隨機而是有一定規律的
先看一段**
package main
import(
"fmt"
"time"
"math/rand"
)func main()
}
我想產生乙個隨機5分鐘的休眠,而現實是我有大量的客戶端請求api,這個請求實時性要求並不高,為了避免所有客戶端同一時間請求api造成服務端壓力,所以想每個客戶端啟動時休眠乙個隨機時間,就不會所有的機器都同一時間請求api,結果這段**的執行結果,並不那麼隨機而是有一定規律的。執行結果如下:
[root@10-3-6-194-ywkf workplace]# go run 1.go
4m41s
1m27s
47s59s
3m1s
18s25s
2m20s
4m16s
0s[root@10-3-6-194-ywkf workplace]# go run 1.go
4m41s
1m27s
47s59s
3m1s
18s25s
2m20s
4m16s
0s
每次執行的結果都一樣,所以我猜想,要是我的所有客戶端同一時間啟動,本來想著隨機休眠乙個時間,就不會一起請求api。這樣的話所有機器同一時間啟動,休眠的時間也一樣,就根本達不到我的預期。也沒時間去了解go底層這個rand是怎麼實現的。先解決問題再說。
package main
import(
"fmt"
"time"
"math/rand"
)func main()
fmt.println("***************==")
rd := rand.new(rand.newsource(time.now().unixnano()))
for i :=0;i<10;i++
}
第二個for迴圈裡每次生成的隨機數就都不一樣了。 SQL Server踩坑 隨機數
目的 想在原本表的基礎上插入一列隨機數,用來匹配某個內容,達到字段內容隨機輸出的目的。但不巧的是 sql server 向一列中插入隨機數時,並不能逐個的插入隨機數,它的隨機數生成函式 rand 只執行了一次,然後將結果批量更新到你所需要的列中,這樣導致的結果就是該字段的列都是同乙個隨機數。過程如下...
隨機數 偽隨機數
隨機數 偽隨機數 rand函式在產生隨機數前,需要系統提供的生成偽隨機數序列的種子,rand根據這個種子的值產生一系列隨機數。如果系統提供的種子沒有變化,每次呼叫rand函式生成的偽隨機數序列都是一樣的。srand unsigned seed 通過引數seed改變系統提供的種子值,從而可以使得每次呼...
使用 SecureRandom 產生隨機數 坑
背景 專案裡用到 random 的地方定義一下 random 變數 如下 在用 sonar 進行檢查時,sonar 建議使用securerandom.getinstancestrong 來初始化,如下 private random rand securerandom.getinstancestron...