Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

写文件部分代码优化 #4

Closed
lengrongfu opened this issue May 23, 2019 · 7 comments
Closed

写文件部分代码优化 #4

lengrongfu opened this issue May 23, 2019 · 7 comments

Comments

@lengrongfu
Copy link

image

在写文件时多个协程通过加锁的方式来写文件的,这样会出现对文件进行随机的写操作,这样不是很高效,可以优化一下;我能想到的优化思路,创建一个channel通道,把下载的数据传递到通道中,然后那一个协程进行顺序的写入,在写入数据时要保证数据时有序的,这样才能写入磁盘时有顺序写入的。

@monkeyWie
Copy link
Member

这样做的话就得把数据缓存在内存中,内存开销会很大的呀。

@lengrongfu
Copy link
Author

我只是提供了一种方案,而且并不是会存储所有的数据,这个内存使用是不定的,最大存储就是文件的全部数据;这样也是用空间来换时间,顺序写入比随机写入的效率应该是高很多;或者就用mmap的方式,这种方式更高效,因为写文件的大小是固定的,所以创建的文件时可以指定大小,这样写入内存就直接映射到文件中了。这是我能想到最高效的方法了。

@monkeyWie
Copy link
Member

这个方案是可以,但是下载程序瓶颈在网络IO上,正常情况的下载的速度是肯定远远低于硬盘写入速度的,所以不用考虑空间换时间的方式来优化性能。
然后关于mmap的问题在32位操作系统上mmap最大只能映射2GB,所以就不考虑了

@lengrongfu
Copy link
Author

可以的

@lengrongfu
Copy link
Author

image

一次网络的速度和一次磁盘寻道的速度是一样的,并不是远远低于。大佬,加个微信认识一下,17702850760

@lengrongfu
Copy link
Author

@monkeyWie

@monkeyWie
Copy link
Member

加你了~

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants