![]() |
1
1
在Windows上,您可以尝试使用 TransmitFile 这有可能通过避免内核空间<->用户空间数据复制来提高性能。 |
![]() |
2
3
在Linux上,使用
但我也会提到,为了便于移植,(既然您似乎对Linux或Windows感兴趣),您应该研究boost.asio。它有一个可移植的API,但是使用
此外,由于您使用的是文件,因此在执行I/O时还应该实现双缓冲以获得最大性能。换句话说,您使用两个缓冲区发送/接收每个文件。例如,在发送端,您将从磁盘读取到一个缓冲区,然后通过网络发送该缓冲区,而另一个线程将下一个数据块从磁盘读取到第二个缓冲区。这样就可以将磁盘I/O与网络I/O重叠。 |
![]() |
3
2
在Linux上,
|
![]() |
4
2
除了
|
![]() |
5
0
不幸的是,如果您希望尽可能提高性能,您仍然需要在Windows和Linux上手工编写I/O代码,因为当前可用的抽象库不能很好地扩展到多个线程(如果有的话)。 如果您想要可移植性(和易用性),Boost ASIO可能是最好的选择,但在多线程可伸缩性方面它确实有其局限性(请参见 C++ Socket Server - Unable to saturate CPU )-我想主要的问题是在不过度锁定的情况下将超时处理集成到多线程事件循环中。 从本质上讲,您想要使用的最大性能是I/O完成端口(Windows上有一个工作线程池)和边缘触发的epoll(Linux上有一个工作线程池)。 |
![]() |
6
0
不要过早地优化程序。 假设这不是一个过早的优化,最简单的事情就是将所有数据保存在内存中。如果愿意,您可以mmap()它们,或者在启动时加载它们。发送已经在记忆中的东西是一件很简单的事情。 说了这句话,尝试用epoll复用很多东西可能会有点头疼,难道你不能用别人已经写过的东西吗? |
![]() |
MaPo · Linux,设置锁定ICMP_过滤器选项 4 月前 |
![]() |
user2138149 · 双栈网络服务器无法按预期处理ipv4请求 5 月前 |
![]() |
Marco · PyCharm Linux系统文件上os.stat异常 6 月前 |