2015-08-28 41 views
0

我需要通過tcpip套接字高效地將相同的消息發送/扇出到主機列表。邏輯需要循環遍歷每個套接字來寫出消息。如果此邏輯運行在Linux用戶模式下,則底層操作系統將調用系統調用的次數與主機數量相同。這是昂貴的,因爲每個系統調用都需要用戶模式到內核模式的上下文切換。發送相同的tcp消息到單個上下文中的多個目標/主機切換

如果可以在採用主機列表(文件描述符)的系統調用中移動循環,效率會更高。這種系統調用是否存在於linux中?

如果這樣的系統調用存在,我們有一個在Java中的等效API(類似於Java中的transferTo()對應於linux中的sendfile())?

+0

你能告訴我們更多關於你的用例嗎?多少臺主機?信息有多大?信息有多頻繁? –

+0

任何使用情況都可以使用2到100的主機數量。大小消息相對較小,小於1KB。 – Thang

+0

重複的問題,看看http://stackoverflow.com/questions/32176028/single-buffer-multiple-sockets-single-syscall-under-linux/32199626#32199626 –

回答

1

我記得,Java NIO支持零拷貝。看看SocketChannel和FileChannel類。

+0

這不是關於零複製...... – Thang

+0

另外java在**操作系統上運行**,而不是在內核內運行。 –

+0

這是一篇關於它的文章http://www.ibm.com/developerworks/library/j-zerocopy/ Java能夠通過JNI/JNA工作 –

相關問題