首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

在内存上开辟一块缓存一般是如何做的

2013-07-09 
在内存上开辟一块缓存一般是怎么做的我是一个新手,现在项目有个需求是:通过读多个视频流,然后存入到本地硬

在内存上开辟一块缓存一般是怎么做的
我是一个新手,现在项目有个需求是:通过读多个视频流,然后存入到本地硬盘中,做法是开辟多个线程来读取多个流,在内存中开辟一个缓存先存储起来,然后再开一个线程来并发的写入本地硬盘(这样做是为了更好的效率)。
我现在的问题是:
1.具体在内存中怎么开辟一个缓存来存储这多个视频流呢,不是创建一个数组吧?
2.一般处理并发问题是用的什么办法啊?
如果您了解上述问题的话,希望能给我详细解答下,不胜感激! 多线程 内存 缓存 linux
[解决办法]
就简单的生产者-消费者模型吧,同进程内,生产线程放数据到内存,将数据信息加入到一个fifo,然后消费线程再从这个fifo读取信息找到对应的数据写入硬盘,更新fifo信息的时候可能需要锁,当然也可以设计成无锁的,具体可以google
[解决办法]
呵呵,说3点关键吧,做过类似项目:

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);

热点排行