当前位置: 技术问答>linux和unix
在内存上开辟一块缓存一般是怎么做的
来源: 互联网 发布时间:2017-05-22
本文导语: 我是一个新手,现在项目有个需求是:通过读多个视频流,然后存入到本地硬盘中,做法是开辟多个线程来读取多个流,在内存中开辟一个缓存先存储起来,然后再开一个线程来并发的写入本地硬盘(这样做是为了更...
我是一个新手,现在项目有个需求是:通过读多个视频流,然后存入到本地硬盘中,做法是开辟多个线程来读取多个流,在内存中开辟一个缓存先存储起来,然后再开一个线程来并发的写入本地硬盘(这样做是为了更好的效率)。
我现在的问题是:
1.具体在内存中怎么开辟一个缓存来存储这多个视频流呢,不是创建一个数组吧?
2.一般处理并发问题是用的什么办法啊?
如果您了解上述问题的话,希望能给我详细解答下,不胜感激!
我现在的问题是:
1.具体在内存中怎么开辟一个缓存来存储这多个视频流呢,不是创建一个数组吧?
2.一般处理并发问题是用的什么办法啊?
如果您了解上述问题的话,希望能给我详细解答下,不胜感激!
|
呵呵,说3点关键吧,做过类似项目:
1,多线程I/O(无论是one event per thread还是leader-follower或者half-sync-half-async都是你的选择,建议第一个最简单实用),提供了I/O并发能力后可以把网卡跑满。
2,多线程做缓存,小内存块从I/O线程通过队列传递给缓存线程(按照文件路径哈希)。在缓存线程中按照文件名->大块缓存进行小块内存堆积,每次堆满一个大快内存则交给磁盘线程追加写到对应路径。另外每个路径对应的缓存超时未操作也应该传递给磁盘线程落入磁盘。
3,写磁盘单线程,将收到的大块内存按4KB每write追加写入对应的文件,另外文件fd需要缓存而不立即关闭,超时未操作则关闭。
1,多线程I/O(无论是one event per thread还是leader-follower或者half-sync-half-async都是你的选择,建议第一个最简单实用),提供了I/O并发能力后可以把网卡跑满。
2,多线程做缓存,小内存块从I/O线程通过队列传递给缓存线程(按照文件路径哈希)。在缓存线程中按照文件名->大块缓存进行小块内存堆积,每次堆满一个大快内存则交给磁盘线程追加写到对应路径。另外每个路径对应的缓存超时未操作也应该传递给磁盘线程落入磁盘。
3,写磁盘单线程,将收到的大块内存按4KB每write追加写入对应的文件,另外文件fd需要缓存而不立即关闭,超时未操作则关闭。
|
1、建缓存,
void *malloc(unsigned int num_bytes);
void *malloc(unsigned int num_bytes);
|
就简单的生产者-消费者模型吧,同进程内,生产线程放数据到内存,将数据信息加入到一个fifo,然后消费线程再从这个fifo读取信息找到对应的数据写入硬盘,更新fifo信息的时候可能需要锁,当然也可以设计成无锁的,具体可以google
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。