[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开发,总计包含121个文件,其中Java源文件54个...系统结构包含多个服务模块,如advertise-server、dot-server和form-collection-server等,旨在提供高效、稳定的广告投放解决方案。
ROS(Robot Operating System,机器人操作系统)是一种专为机器人设计的开源操作系统,它提供了一个标准化的框架,允许开发者用C++或Python等语言编写机器人应用程序。ROS的核心设计理念是采用分布式计算模型,将...
本文档详细介绍了PX4源码开发人员的软件架构,包括软件堆栈结构、内部进程通信、安全和保护模型、PX4应用程序框架、节点句柄、发布和订阅等知识点。 一、软件架构 PX4的软件架构主要分为四层:应用程序接口、应用...
api服务器 用于构建Kubernetes聚合API服务器的通用库。 目的 该库包含用于创建Kubernetes聚合... apiserver是从同步的。 在该位置进行代码更改,合并到k8s.io/kubernetes ,然后在此处同步。 事情你不应该这样做 直
- **模块化**:ROS的核心特性之一是将整个机器人系统分解成多个独立的部分或“节点”,这些节点可以单独开发和测试。这种方式极大地简化了复杂系统的管理和维护。 - **通信机制**:ROS支持多种通信模式,包括发布/...
"btle-advertise"项目是一个关于如何使用低功耗蓝牙进行广告服务的示例,主要针对Java开发人员。下面我们将深入探讨BLE广告、Java在其中的角色以及如何利用这个项目来学习和实践BLE广告技术。 首先,BLE广告是BLE...
SDK还提供了多种mesh网络的例子,例如灯光控制、串口通信、PB-ADV(Page Broadcast-Advertise)配置和远程配置等。PB-Remote远程配置功能允许在mesh网络上远程配置设备,无需设备与配置器有直接物理范围接触。它特别...
总结来说,"asp.net+sql人才网站设计(源代码+LW)"是一个全面的Web应用开发实例,它覆盖了前端设计、后端逻辑、数据库管理等多个核心领域,对于学习和理解ASP.NET与SQL Server的结合使用具有很高的参考价值。...
本文档旨在为PX4源码开发人员提供详细的软件架构说明,涵盖了PX4的软件架构、消息传递机制、进程通信、安全和保护模型等方面的知识点。 软件架构 PX4的软件架构主要分为四层: 1. 应用程序接口(Application ...
思途旅游CMS数据库表结构字段说明 ...思途旅游CMS数据库表结构字段说明文档是思途旅游CMS系统的重要组件之一,提供了系统中的数据存储和处理机制的详细说明,对系统的开发和维护产生了重要的影响。
Advertise and monetize your applications ☆ 出版信息:☆ [作者信息] Sanjay Shah Khirulnizam Abd Rahman [出版机构] Packt Publishing [出版日期] 2013年07月26日 [图书页数] 144页 [图书语言] 英语 ...
// 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是的服务器端部分。 用法 参见 。 Docker镜像 提供了一个映像: 以下环境变量用于配置服务器: SSH_KEYS_PATH (强制性):ssh密钥所在的路径。 HAS_WEBSOCKET :如果存在tmate-websocket服务器...
例如,通过BPD的分解和UML的类图、对象图、通信图及状态图,可以详细地描述Bind Advertise子流程的各个层面,从整体到细节,从静态结构到动态行为,全面覆盖了系统设计的各个方面。这种建模方式对于理解和优化业务...
如果你对这个职位感兴趣,你需要通过电子邮件提交你的简历至Mount Allison大学年度捐赠经理Susan Smith。在应聘时,务必注意截止日期是2014年9月19日中午12点,错过了这个时间,机会就不再属于你。 在准备简历时,...
DHCPv6的工作流程与DHCP类似,但有一些重要的区别,例如使用不同的报文类型(如 Solicit、Advertise、Request 和 Reply)以及不同类型的地址分配模式(如状态ful和stateless)。 通过研究这个压缩包中的源代码,你...
标签涉及“Linux操作系统”、“系统开发”、“参考文献”和“专业指导”,这表明文章将深入到Linux系统的底层机制,讲解如何开发和配置与IPv6相关的服务,并提供了专业指导和参考资料。 部分内容提到了IPv6的发展...
【沙沙网络源码】是针对“沙沙网络”这一平台的编程代码,它包含了2013年更新的最新版本,并且经过了个人的改编...同时,个人改编的部分可能包含了一些优化和定制化的特性,这些都为研究和改进该平台提供了宝贵的参考。
2. **词汇与表达**:每个问题都涉及到特定的词汇和表达,例如对话中的"忙"(busy)、"农业"(agriculture)、"广告"(advertise)等。这些词汇和表达的掌握对于理解对话内容至关重要,同时也能帮助学生扩大词汇量,...