Chinaunix

标题: 如何设计缓存 [打印本页]

作者: justin8204    时间: 2008-08-20 13:58
标题: 如何设计缓存
想设计一个缓存,一个进程取数据放入到缓存,另一进程从缓存读取数据写入文件,这个缓存的结构应该怎么设计?每次放入缓存的数据长度有可能不一样,请大家指点一下。
作者: cjaizss    时间: 2008-08-20 14:01
是基于流(stream)还是基于数据报(datagram)?
作者: gawk    时间: 2008-08-20 14:03
共享内存应该很适合
man shmat
结构可以链表,或者就是一个数组表

[ 本帖最后由 gawk 于 2008-8-20 14:05 编辑 ]
作者: justin8204    时间: 2008-08-20 14:04
基于数据报吧,我是从数据库中取结构化数据。
作者: reiase    时间: 2008-08-20 14:06
曾经跟同学讨论过类似问题,计划是用mmap来映射一块内存,用管道来阻塞进程
作者: cjaizss    时间: 2008-08-20 14:08
原帖由 justin8204 于 2008-8-20 14:04 发表
基于数据报吧,我是从数据库中取结构化数据。

是按照顺序取吗?如果是这样,那么
[长度][内容]
然后设计成一个环队列就行了
注意临界区
作者: justin8204    时间: 2008-08-20 14:12
我原来也想用队列,但考虑到入队,出队时时程要互斥,这样的效率和无缓存的效率比还有优势吗?
作者: converse    时间: 2008-08-20 14:16
http://bbs.chinaunix.net/viewthr ... p%3Bfilter%3Ddigest
作者: cjaizss    时间: 2008-08-20 14:20
原帖由 justin8204 于 2008-8-20 14:12 发表
我原来也想用队列,但考虑到入队,出队时时程要互斥,这样的效率和无缓存的效率比还有优势吗?

你不可能避免临界区,不过你可以用信号量来提高效率,而不是总体一个互斥

[ 本帖最后由 cjaizss 于 2008-8-20 14:22 编辑 ]
作者: Godbach    时间: 2008-08-20 14:24
可以考虑使用共享内存
作者: UnixStudier    时间: 2008-08-20 17:06
图省事就用memcachd。
设计缓存是大问题,我最近也在琢磨这个问题。
作者: system888net    时间: 2008-08-20 18:19
具体问题具体分析.
作者: selfrun    时间: 2008-08-21 00:27
用tcp连接啊
作者: qliu00    时间: 2008-08-21 08:34
原帖由 selfrun 于 2008-8-21 00:27 发表
用tcp连接啊

怎么连接?
作者: chenjia6605    时间: 2008-08-21 09:37
可以考虑用网络中的C/S 结构, Server是一个进程,用于完成缓存应有的功能, 如插入、查找、替换算法等
在此基础上给客户端提供一系列使用该缓存的API, 如打开、插入、查找、清空等, 这个API其实封装了进程之
间通信的方式, 可以采用 消息队列、共享内存 也可以采用FIFO, 还可以采用socket等。
作者: nnnqpnnn    时间: 2008-08-21 09:41
这个问题是楼主项目中的?
如果让单个读进程紧紧写文件的话,感觉用缓冲没有意义。
作者: xiexiecn    时间: 2008-08-21 09:48
什么罗里罗嗦的,用pipe一了百了。
作者: bbpet    时间: 2008-08-21 22:13
原帖由 cjaizss 于 2008-8-20 14:20 发表

你不可能避免临界区,不过你可以用信号量来提高效率,而不是总体一个互斥

嗯,可以详细说说如何提高效率么?




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2