`
wooce
  • 浏览: 184787 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

邮件系统的Advertise Server的开发当中的一些关于cache和加锁的对话

阅读更多
[2001-7-18 5:07:19] A:
hi, something about adstorge server....
in adstoragesvr.cpp, the .Get() function of adcache, and the lock of the cache has some problems i think.....

[2001-7-18 5:08:59] B:
ok, please give more info.

[2001-7-18 5:11:58] A:
I think u can lock the cache between get and store the cache...so
the sequence is  lock the cache->Get()-> Fetchtemplate->Store->release lock, otherwise it may cause multi-thread problem...
and the process above should be put in Cache.Get() function....

[2001-7-18 5:13:41] A:
the reason that puting the process to Get() function is that it is better that the lock is used just in the cache class...

[2001-7-18 5:14:48] B:
It's Rayman who advice me to separate  database access from 
ADCache......

[2001-7-18 5:19:26] A:
yes, separate the db access is better , but then the interal level acess of adcache will appear ...

[2001-7-18 5:22:07] A:
maybe we can give an function to lock the cache in some hashbask, it is not good but better....

[2001-7-18 5:22:46] B:
do you think that  the OnRequest function at now would cause
a deadlock  in multithread case?

[2001-7-18 5:24:36] A:
no, it maynot...
but the efficency is not good...
and a more serious problem...it is possible that many thread can't get the mid content at the same time, and they get it from db just for one mail content....

[2001-7-18 5:27:25] A:
if we don't consider about the structure of this program, at least
the lock code of adcache should be placed before u invoke Cache's Get() function...

[2001-7-18 5:31:37] B:
按你这么说其实PORTAL Server的ipaecache也有此问题....

[2001-7-18 5:32:52] A:
yes, I do all the process in IPAECache's Get() function, and the lock is between those process as I wrote to you before...

[2001-7-18 5:37:27] B:
我觉得其实区别不大, 不同点就是我现在的写法在Cache中没有letter的时候要多加锁和释放锁一次,  性能可能下降一些.
不过其实我原来是参照ipaecache的把数据库访问,Store等全封装在同一个Get()函数里,  后来Rayman说把数据库访问和Cache分开来,  才改成了现在这样的, 

[2001-7-18 5:45:08] A:
HEHE..
由程序结构來说, 兩种做法都是差不多的.只是在兩种风格上取舍那种好而已.
不过你看看, 在你的程序中, 调用GET时从CACHE中取出信內容, 如沒有則就从DB中取, 存入CACHE, 你可以设想有很多thread一起去到GET这行取某一MID的內容. 但是它们取得的都是null, 即很多thread都不能从CACHE中取到同一个MID的內容. 它们到走过了ad.isnull这行, 但都未过Store那行, 此时它们都会从DB中取, 都重复地存入CACHE了.

[2001-7-18 5:48:47] A:
情況可能比较复杂...这样写可能不太清楚...

[2001-7-18 5:49:53] B:
我已经明白你的意思了.

[2001-7-18 5:51:54] A:
你应为呢?

我忘了cache中遇到已有內容时的处理方式...如果它是采用原來的指針进行內容替換的话, 你现有的那段程序可能还有其它一些多線程问题...

[2001-7-18 5:57:44] A:
現在回想起來, 其实当时的PAECACHE设计得很差...如果你覺得有不好的地方, 你不一定要跟它一样的...

[2001-7-18 5:58:29] B:
其实统一写到Get()函数里, 能够避免你这次说的很多thread并发取Cache中没有的信件的问题,   但对于很多thread并发取同一在Cache里有的信件的问题,  统一写到Get()里并加锁的效率一样是不高的, 亦即ipaecache的做法的效率也不会高...... 

:)  谢谢你的提醒, 我会考虑更好的实现方法.

[2001-7-18 6:03:51] A:
是的, 但是按PAECACHE这种做法是把一个HASH桶鎖上, 它每次都只鎖上CACHE中的一部分而已, 但是它鎖的时间间隔是较長的...所以如果按PAECACHE这种做法, 代价只是在某一个HASH桶上的結點存取时间長一点, 但是与多个thread从数据库中取出并重复执行STORE操作相比, 效率始终高出很多...最少数据库那边已不是一个小的开銷了....

[2001-7-18 6:12:51] A:
好像adcache中的settimetolive和setnodesize等函数沒有存在的必要吧?
当时我只是因为PAE那边较特殊才写的...那兩个函数不太好....

[2001-7-18 6:34:26] B:
IHashCache中的Fetch()函数都是先LockNodeByKey()加锁,  这意味着一个时间只能有一个thread调用Fetch读取Cache中的Node, 
看来ihashcache.cpp也得动手改.....   改成读写锁.....

[2001-7-18 6:35:59] A:
这些鎖的粒度都是按HASH桶, 就是說在同一时间, 只要結點位于不同的桶, 就能同时存取...

[2001-7-18 6:38:32] A:
至于读写锁, 我们当时都有考慮, 但是因为好像用到读锁的地方不太多, 所以就干脆省掉了...

[2001-7-18 6:39:12] B:
但无论如何把X锁改成RW锁会more efficient, 况且广告信的数量不会很多,  可能就几封而已....
分享到:
评论

相关推荐

    基于Java和JavaScript的link-advertise广告系统设计源码

    该广告系统源码基于Java与JavaScript开发,总计包含121个文件,其中Java源文件54个...系统结构包含多个服务模块,如advertise-server、dot-server和form-collection-server等,旨在提供高效、稳定的广告投放解决方案。

    机器人操作系统ROS编程开发-详细总结.pdf

    ROS(Robot Operating System,机器人操作系统)是一种专为机器人设计的开源操作系统,它提供了一个标准化的框架,允许开发者用C++或Python等语言编写机器人应用程序。ROS的核心设计理念是采用分布式计算模型,将...

    PX4源码开发人员文档(一)——软件架构.pdf

    本文档详细介绍了PX4源码开发人员的软件架构,包括软件堆栈结构、内部进程通信、安全和保护模型、PX4应用程序框架、节点句柄、发布和订阅等知识点。 一、软件架构 PX4的软件架构主要分为四层:应用程序接口、应用...

    apiserver:用于编写Kubernetes风格的API服务器的库

    api服务器 用于构建Kubernetes聚合API服务器的通用库。 目的 该库包含用于创建Kubernetes聚合... apiserver是从同步的。 在该位置进行代码更改,合并到k8s.io/kubernetes ,然后在此处同步。 事情你不应该这样做 直

    ROS开发开发教程.docx

    - **模块化**:ROS的核心特性之一是将整个机器人系统分解成多个独立的部分或“节点”,这些节点可以单独开发和测试。这种方式极大地简化了复杂系统的管理和维护。 - **通信机制**:ROS支持多种通信模式,包括发布/...

    btle-advertise:通过低功耗蓝牙广告服务的示例项目

    "btle-advertise"项目是一个关于如何使用低功耗蓝牙进行广告服务的示例,主要针对Java开发人员。下面我们将深入探讨BLE广告、Java在其中的角色以及如何利用这个项目来学习和实践BLE广告技术。 首先,BLE广告是BLE...

    Mesh如何开发

    SDK还提供了多种mesh网络的例子,例如灯光控制、串口通信、PB-ADV(Page Broadcast-Advertise)配置和远程配置等。PB-Remote远程配置功能允许在mesh网络上远程配置设备,无需设备与配置器有直接物理范围接触。它特别...

    asp.net+sql人才网站设计(源代码+LW).zip

    总结来说,"asp.net+sql人才网站设计(源代码+LW)"是一个全面的Web应用开发实例,它覆盖了前端设计、后端逻辑、数据库管理等多个核心领域,对于学习和理解ASP.NET与SQL Server的结合使用具有很高的参考价值。...

    PX4源码开发人员文档(一)——软件架构.doc

    本文档旨在为PX4源码开发人员提供详细的软件架构说明,涵盖了PX4的软件架构、消息传递机制、进程通信、安全和保护模型等方面的知识点。 软件架构 PX4的软件架构主要分为四层: 1. 应用程序接口(Application ...

    思途旅游CMS数据库表结构字段说明开发文档(1)(1).docx

    思途旅游CMS数据库表结构字段说明 ...思途旅游CMS数据库表结构字段说明文档是思途旅游CMS系统的重要组件之一,提供了系统中的数据存储和处理机制的详细说明,对系统的开发和维护产生了重要的影响。

    [Android] Android 开发工具集 Eclipse 平台 英文版

    Advertise and monetize your applications ☆ 出版信息:☆ [作者信息] Sanjay Shah Khirulnizam Abd Rahman [出版机构] Packt Publishing [出版日期] 2013年07月26日 [图书页数] 144页 [图书语言] 英语 ...

    bonjour:JavaScript中的BonjourZeroconf协议实现

    // advertise an HTTP server on port 3000 bonjour . publish ( { name : 'My Web Server' , type : 'http' , port : 3000 } ) // browse for all http services bonjour . find ( { type : 'http' } , function ( ...

    tmate-ssh-server:tmate SSH服务器

    tmate-ssh-server是的服务器端部分。 用法 参见 。 Docker镜像 提供了一个映像: 以下环境变量用于配置服务器: SSH_KEYS_PATH (强制性):ssh密钥所在的路径。 HAS_WEBSOCKET :如果存在tmate-websocket服务器...

    1BusinessProcessModelingBPM业务流程建模.doc

    例如,通过BPD的分解和UML的类图、对象图、通信图及状态图,可以详细地描述Bind Advertise子流程的各个层面,从整体到细节,从静态结构到动态行为,全面覆盖了系统设计的各个方面。这种建模方式对于理解和优化业务...

    Advertisem

    如果你对这个职位感兴趣,你需要通过电子邮件提交你的简历至Mount Allison大学年度捐赠经理Susan Smith。在应聘时,务必注意截止日期是2014年9月19日中午12点,错过了这个时间,机会就不再属于你。 在准备简历时,...

    dhcp.rar_dhcp_linux dhcp

    DHCPv6的工作流程与DHCP类似,但有一些重要的区别,例如使用不同的报文类型(如 Solicit、Advertise、Request 和 Reply)以及不同类型的地址分配模式(如状态ful和stateless)。 通过研究这个压缩包中的源代码,你...

    基于IPv6的动态主机配置在Linux中的应用研究.pdf

    标签涉及“Linux操作系统”、“系统开发”、“参考文献”和“专业指导”,这表明文章将深入到Linux系统的底层机制,讲解如何开发和配置与IPv6相关的服务,并提供了专业指导和参考资料。 部分内容提到了IPv6的发展...

    沙沙网络源码

    【沙沙网络源码】是针对“沙沙网络”这一平台的编程代码,它包含了2013年更新的最新版本,并且经过了个人的改编...同时,个人改编的部分可能包含了一些优化和定制化的特性,这些都为研究和改进该平台提供了宝贵的参考。

    成才之路201520人教版高一英语必修1 Unit5作业题及答案10精选.doc

    2. **词汇与表达**:每个问题都涉及到特定的词汇和表达,例如对话中的"忙"(busy)、"农业"(agriculture)、"广告"(advertise)等。这些词汇和表达的掌握对于理解对话内容至关重要,同时也能帮助学生扩大词汇量,...

Global site tag (gtag.js) - Google Analytics