2014-10-11 6 views
0

척 10 초마다 진정한 무작위 정수 값 (4 바이트)이 필요한 클라이언트 서비스가 있습니다.과거에 생성되어 저장된 임의의 값이 여전히 무작위로 간주됩니까?

이와 같이 대기 노이즈를 기반으로 실제 임의의 값을 생성하는 하드웨어를 얻습니다. 이 장치는 초당 최대 8 바이트의 임의의 데이터를 생성 할 수 있습니다.

이제 10 초마다 내 클라이언트 서비스가 장치를 쿼리하고 생성 된 8 바이트 중 4 바이트를 가져옵니다. 이 값은 클라이언트 서비스에서 즉시 사용되며 사실 무작위로 간주됩니다.

이제 동일한 알고리즘을 실행하는 3 개의 새로운 클라이언트 서비스 (총 4 개)를 인스턴스화하는 척하십시오. 서비스는 모두 동시에 동기화되므로 장치를 동시에 쿼리합니다.

이제 10 초 표시에서 서비스 중 2 개 (4 개 중) 만 임의의 값을 즉시 받고 다른 2 개 서비스는 수신하기 전에 최대 1 초를 대기해야합니다 값. 이것은 바람직하지 않습니다.

값 비싼 장치의 사용을 극대화하기 때문에이 솔루션을 제안합니다. 서버에있는 소프트웨어 (장치가 연결된 곳)는 실제로 장치에서 모든 값을 수집하여 저장합니다. 대기열에 있습니다 (RAM에 비해 너무 커지면 자동으로 대기열에서 제외됩니다). 이제 클라이언트 서비스가 쿼리를 생성하면 임의 값은 장치에서 직접 가져 오는 대신 대기열에서 대기열에서 제외됩니다. 이전과 마찬가지로 각 무작위 값은 한 번만 사용되지만이 경우 대기열의 값 중 일부는 오랫동안 거기에있을 수 있습니다.

나는이 솔루션으로 내가 잘못한 일을하고 있을지 모른다는 두려움이있다. 과거에 생성 된 값을 사용하고 '신선한'것이 아닌 잔소리 같은 느낌을 떨쳐 낼 수는 없습니다. 어떻게 든 이것을 의사 랜덤 생성기로 되돌릴 수 있습니다. 내 두려움은 옳은가?

+1

나무가 숲에 떨어지는 경우 ... –

+2

주사위를 굴린 다음 몇 초 동안 눈을 감은 다음 모양을 확인하십시오. 그 롤은 더 이상 무작위인가요? –

답변

4

중요한 것은 중요한 것은 사용자의 random 함수가 통계적으로 임의의 값의 시퀀스를 생성한다는 것입니다.

그 결과, 구현시 값을 한 번에 하나씩 가져 오거나 한 번에 모두 값을 가져 와서 대기열에 넣을지 여부는 중요하지 않습니다. 충분히 무작위이면 괜찮습니다.

0

나는 서른 두와 동의해야합니다. 클라이언트 서비스가 특정 시간 또는 값을 선택하여 사용할 수있는 것처럼 아닙니다. 가치가 이미 사용되지 않은 한 그것은 문제가되어서는 안됩니다.

4 가지 장치가 모두 장치에서 새 값을 요청하면 생성 된 값이 지워질 수 있습니다. 당신은 그들이 모두 연결되어 있고 동시에 쿼리하고 있다고 말했기 때문에 이것은 매 10 초마다 이루어져야합니다. 적어도 4 개의 새로운 난수를 생성하려면 충분한 시간이 필요합니다.