2015-11-23 26 views
2

我有一個阻塞隊列,其中有多個寫入者正在寫入。我想把一個事務控制機制放在不超過50個編寫者(或接近)每秒可寫的地方。有沒有辦法實現它?阻塞隊列和SocketChannel的流量控制寫入

編輯1:使用SocketChannel寫入方法有類似的要求。這是爲了允許n位作者每秒寫入數據。 n的值有所不同。我不必擔心這一點。

另一個編輯:我想使用一個循環屏障,我將每秒發佈&重置。我正確的方向嗎?

+0

到目前爲止您嘗試了什麼? – npinti

+0

@npinti,我想不出任何東西來限制每秒的流量。儘管如果我有任何時間限制流量的選項,那麼我可以使用信號量。任何指針,使其工作在這個時間框架的事情? –

+1

只需重寫add方法即可睡眠20ms。 – EJP

回答

0

最後我混合兩種解決方案來實現我想要的。我使用有界的信號量來限制作家在任何時間點以及定時循環障礙,這有助於我定義總的寫/秒。

0

我不認爲50個作家的1個信號量就足夠了。

你可以做什麼,例如將有一個門票池和一個機制發佈它們。池的大小將允許您規定最大數量的作者和發佈它們的機制將允許您控制流程。

從本質上講,流量會像這樣:

  1. 作家請求票。當wrjter被授予票據時,您可以使用信號量爲其他線程進行vlock訪問。
  2. 一旦作家有一張票,它寫入緩衝區。
  3. 作者返回票證(同樣,您可以使用信號量來控制對此部分的訪問權限,以便在任何一個時間點作者要求或返回票證)。
+0

此解決方案不適用於時間範圍的事情。 –

+0

@AbhashUpadhyaya這是發佈機制將追蹤的內容。 – npinti