如何优化局域网中的数据传输?
How can I optimize data transmission in local area network?
我想要的是传输一个矩阵,例如一个 1000x1000 的矩阵(实际上比那个大),在 R
中从 NodeA 到 NodeB。现在我使用下面的代码:
节点A:
A<-matrix(0,1000,1000)
Conn1<-socketConnection(port=8000, server=TRUE)
write.table(A,file = Conn1, col.names = FALSE)
节点B:
HostId<-'x.x.x.x'
Conn2<-socketConnection(host=HostId, port=8000, blocking=TRUE)
A<-read.table(file = Conn2,nrows =1000)
但是当我运行同时传输4个并且矩阵的维度满足1.5k(一个~20Mb的矩阵)时,我需要大约30s才能完成数据传输。但是,在我看来,FTP的数据传输速度约为10Mb/s,应该比30s快很多,所以我想知道如何改进我的代码?
提前致谢。
编辑:
尝试 后,发生了一些奇怪的事情:
serialize
覆盖 test1
中的 write.table
t1<-proc.time()
S<-unserialize(Con,refhook = NULL)
t2<-proc.time() -t1
t3<-proc.time()
S<-read.table(file=Con)
t4<-proc.time() -t3
proc.time()
的输出是 14s
vs 70s
:
但是,当我在 this answer (test2) 这样的框架中同时 运行 4 段代码时,serialize
比 write.table
花费了很多时间.
serialize
的输出是101s(ptn
中的第三个数)
write.table
的输出是16s(ptn
中的第三个数)
感谢任何能忍受这么长post(还有我糟糕的英语)的人。 命令serialize
可能是最好的答案,如果我只有一段代码到运行,但是test2中的奇怪事件确实超出了我的范围.我想知道我是否必须使用一些外部工具,例如 MPI。
对于 read.table
和 write.table
,您在传输之前将 table 转换为文本。这将需要时间并增加尺寸。查看 serialize()
将矩阵转换为二进制格式。
编辑:您似乎无法与多个客户端交互。如果你愿意学习一些东西,我会建议像 ZeroMQ 这样的东西,例如通过 rzmq
包。不过,您将不得不考虑架构。有关几个示例,请参阅 http://zguide.zeromq.org/page:all。
我想要的是传输一个矩阵,例如一个 1000x1000 的矩阵(实际上比那个大),在 R
中从 NodeA 到 NodeB。现在我使用下面的代码:
节点A:
A<-matrix(0,1000,1000)
Conn1<-socketConnection(port=8000, server=TRUE)
write.table(A,file = Conn1, col.names = FALSE)
节点B:
HostId<-'x.x.x.x'
Conn2<-socketConnection(host=HostId, port=8000, blocking=TRUE)
A<-read.table(file = Conn2,nrows =1000)
但是当我运行同时传输4个并且矩阵的维度满足1.5k(一个~20Mb的矩阵)时,我需要大约30s才能完成数据传输。但是,在我看来,FTP的数据传输速度约为10Mb/s,应该比30s快很多,所以我想知道如何改进我的代码?
提前致谢。
编辑:
尝试
serialize
覆盖 test1
write.table
t1<-proc.time()
S<-unserialize(Con,refhook = NULL)
t2<-proc.time() -t1
t3<-proc.time()
S<-read.table(file=Con)
t4<-proc.time() -t3
proc.time()
的输出是 14s
vs 70s
:
但是,当我在 this answer (test2) 这样的框架中同时 运行 4 段代码时,serialize
比 write.table
花费了很多时间.
serialize
的输出是101s(ptn
中的第三个数)
write.table
的输出是16s(ptn
中的第三个数)
感谢任何能忍受这么长post(还有我糟糕的英语)的人。 命令serialize
可能是最好的答案,如果我只有一段代码到运行,但是test2中的奇怪事件确实超出了我的范围.我想知道我是否必须使用一些外部工具,例如 MPI。
对于 read.table
和 write.table
,您在传输之前将 table 转换为文本。这将需要时间并增加尺寸。查看 serialize()
将矩阵转换为二进制格式。
编辑:您似乎无法与多个客户端交互。如果你愿意学习一些东西,我会建议像 ZeroMQ 这样的东西,例如通过 rzmq
包。不过,您将不得不考虑架构。有关几个示例,请参阅 http://zguide.zeromq.org/page:all。