glchen 发表于 2009-7-22 11:06:14

sendfile的疑问

1. linux下的sendfile,传说中的零拷贝。看例子都是再说怎么利用sendfile读文件写socket,那么如果我想要读socket写文件,也能用这个函数吗?

2. windows下有没有对应的什么api能达到类似sendfile功能的?

3. ACE_Asynch_Transmit_File用异步的方式把文件传输到socket,跟sendfile相比,那个会更好一些?ACE_Asynch_Transmit_File需要跟Proactor配合使用,linux下Proactor又不好用,不知道ACE_Posix_Proactor究竟是基于什么机制实现的,能否像windows下的IOCP一样有效?epoll是Reactor的。

谢谢!

winston 发表于 2009-7-23 13:52:16

参考MSDN的:TransmitFile
相信你能找到答案

glchen 发表于 2009-7-23 14:04:11

回复 #2 winston 的帖子

恩,看来ace的ace_transmit_file在windows下应该是基于TransmitFile这个Api实现的。
读socket写文件的话,有好什么好建议吗?
谢谢!~

stuarts 发表于 2009-7-24 14:34:12

神说:学好ACE,要看书。。。

wishel 发表于 2009-7-24 14:47:00

原帖由 glchen 于 2009-7-23 14:04 发表 http://acejoy.com/bbs/images/common/back.gif
恩,看来ace的ace_transmit_file在windows下应该是基于TransmitFile这个Api实现的。
读socket写文件的话,有好什么好建议吗?
谢谢!~

读socket写文件的话,没有对应的零拷贝api
可能是一般服务器很少做大量读socket写文件,所以也没必要提供这样的api

glchen 发表于 2009-7-24 18:18:05

回复 #5 wishel 的帖子

如果我们做Ip camera 录像存储服务器,就需要一直从socket读取达到的视频流写入磁盘,这中情况下如果有类似sendfile的做法,是不是会更好呢?

wishel 发表于 2009-7-25 15:21:20

原帖由 glchen 于 2009-7-24 18:18 发表 http://acejoy.com/bbs/images/common/back.gif
如果我们做Ip camera 录像存储服务器,就需要一直从socket读取达到的视频流写入磁盘,这中情况下如果有类似sendfile的做法,是不是会更好呢?

这种情况的服务器负载应该不会很高,并发量不会很大。也就是说不是那种对性能有极端追求的服务器。

性能并不是问题的全部,尤其是在系统设计的时候,重点在于各种价值的权衡。比如鲁棒性,可读性,简单性,安全性,伸缩性等等。片面的追求任何一个都会以牺牲其他价值为代价。最终的结果就是针对实际情况做权衡,有所取舍。

个人观点:性能不是问题的全部。在很多很多情况下,性能不重要,起码没有你想象的那么重要。
所以我在开发的时候,首先假设性能不是问题,当真的发现性能有问题时,才去在需要的部位做优化。相对于其他价值,我更关注简单性和可读性。
软件是开发来实用的,不是用来炫技术的。两套软件,一个用了复杂的技术和更高的性能解决了问题,一个更简单性能虽然差些,但仍然满足了需求,我认为后者更经济,开发和维护成本都低得多。
页: [1]
查看完整版本: sendfile的疑问