2012-11-20 42 views
0

我們有幾個Java應用程序在同一臺Linux機器上運行,並通過TCP來回發送消息。我們使用ServerSocket和Socket來創建連接。我想盡可能地減少這種通信的延遲。似乎有可能在我們的盒子上分配一個核心來執行連續的TCP輪詢,這將改善性能。這是如何在Linux和/或Java中完成的?爲TCP輪詢分配內核

回答

0

不是。沒有辦法將線程分配給Java中的核心。

並且分配單個內核不會提高性能;相反,它可能會減少它。我不清楚'polling'是什麼意思,但你不能用套接字來做:你必須在read()中使用單獨的線程阻塞。如果您正在考慮使用InputStream.available(),則您正在完全吠叫錯誤的樹,應該使用NIO和Selector。

0

有一種方法可以實現這一點,但它不是可移植的。

你需要做的是: 1)找出本地線程ID 2)設置親和力的本地線程

你可以得到本地線程ID(這在Linux上是一個進程ID)使用不支持來自sun.jvm.hotspot下的軟件包的類。您可以通過將sa-jdi.jar(與jdk捆綁在一起)構建路徑來鏈接這些類。由於我不喜歡從其他站點複製答案的想法,因此您應該閱讀github

中的說明一旦獲得本機線程ID,應該使用'taskset'命令行實用程序更改親和力。您可以在這裏找到的how to use taskset其他的帖子