2013-02-26 6 views
2

Java Semaphore 클래스를 사용하여 leaky bucket algorithm과 밀접하게 유사한 것을 구현하려고하고 있으며 이것이 적합할지 궁금합니다. 목표는 공유 리소스에 대한 쓰기 속도를 제한하는 것이며, 한 스레드가 주기적으로 세마포어에 대한 허가를 공개하고 작업 스레드가 원하는 항목의 크기만큼 많은 허가를 얻으려고 시도 할 것입니다 쓰기.Java Semaphore 클래스를 사용한 누수 버킷 류 레이트 제한

궁금한 점은 내 뒤에서 int 하나를 사용하여 구현했는지 또는 활성 사용권 한 (사용 가능한 일종의 대기열을 사용하여 구현 됨)의 공간 사용량이 선형인지 여부입니다. 공간 (그리고 시간) 선형입니다, 그럼 분명히 바이트로 속도에 대해 얘기하는 피하고 싶습니다. 그것은 단지 int을 있다면, 나는 매우 높은 비율에 대한 오버 플로우 이외의 그러한 우려가 없어야한다

누구나 어떤 아이디어가 (이 경우 나는 long -backed Semaphore이 원하는 것)?

+0

체크 아웃 https://github.com/bbeck/token-bucket – kervin

답변

2

http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Semaphore.html에서 :

실제 허가 개체는 사용되지 않습니다; 세마포어는 사용 가능한 개수를 유지하고 그에 따라 작동합니다.

나는 소스를 확인, 그것은 참으로 int (안 long)에 의해 백업됩니다.

+0

나는 그것을 알아 차리지 못해서 어리 석다. 감사! 이제는 내가'long'-backed 한 것을 얻을 수 있다면 :) –