2013-02-09 38 views
1

我怎樣才能最有效地通過一個12,000個IP地址的數據庫,並用它們全部打開一個套接字? 目前我的工作是這樣的:用Java高效「Ping」

  • 獲取列表中的
  • 對於每一個IP的所有IP地址,打開打開一個套接字與服務器並接收數據包一個新的線程。
  • 在新線程上,根據IP在線的天氣更新信息,以及打開套接字時返回的信息。

我目前的解決方案工作,它只需要一段時間才能通過數據庫一次。我試圖找到一種非常快的方式來通過數據庫;但是,我不知道從哪裏開始。任何幫助表示讚賞,謝謝!

編輯:我打開一個套接字併發送一個TCP數據包,然後存儲信息。

+2

12k線程?可能不是一個好主意。我會使用固定的工作人員池。 – 2013-02-09 15:28:13

+0

也許如果你使用UDP並將所有內容保存在同一個線程中? – user000001 2013-02-09 15:29:15

+1

要清楚,ICMP ping還是什麼? ICMP沒有套接字的概念。 – 2013-02-09 15:30:31

回答

2

爲此嘗試使用類似netty(NIO)的東西。您可以在一個線程中將請求分發給所有IP(無論出於何種原因),並等待另一個線程中的返回。你目前的方法使用線程來管理所有遠程主機的異步答案,這似乎是好的並且可以工作,但是產生線程只是爲了等待並不是最優的。更好地打開大量連接,發送數據包,等待結果並讓操作系統管理等待。

如果要執行花費不可預測時間的併發計算,請僅使用多個線程。如果你有這樣清楚定義的任務,比如打開大量的套接字,發送數據並等待響應,那麼在java中使用NIO框架(順便說一句,通常單個線程在這裏應該足夠了)。