当我使用G-WAN和C时,我想计算网页的浏览量。我对它们并不太熟悉。我使用的是英特尔64位处理器。我已经搜索了这个话题,但仍然不知道,有人能帮我吗?非常感谢。
我对G-WAN知之甚少。我一直在看他们的网站,据我所知,每个CPU运行一个线程;并且您的C代码被加载一次,然后在每次需要时在G-WAN线程的上下文中执行。在这种情况下,您应该能够使用普通的原子(例如,为C的原子操作提供合适的库,如果找不到合适的C库,则可以使用内联汇编)。
问题是将计数器存储在磁盘上(例如,这样每当服务器重新启动时,计数器就不会重置为零)。理论上,您只需要在web服务器启动时从磁盘读取一次以前的值,并在服务器停止时将新值写入磁盘一次(或者可能每30分钟写入一次,以防服务器崩溃)。它不是关键路径上的东西(例如,不是每次提供页面时都必须存储/检索的东西)。在实践中,我根本不知道G-WAN是否对此有任何支持(或者类似atexit()
功能的东西是否有效)。
如果G_WAN不支持它,你可以使用(例如)由某种互斥体保护的全局"上次保存状态的时间"变量来破解它;其中(如果未设置)从磁盘加载旧状态并设置全局变量,如果设置了全局变量,则使用它来确定上次保存后是否已经过了"X分钟"。当然,获取互斥并检查全局变量的开销要比递增计数器的开销高;但它仍然比使用数据库引擎快几千倍。
当我使用G-WAN和C 时,我想计算网页的浏览量
很好,有几个选项:
- 一个G-WAN servlet
- G-WAN连接处理程序
- G-WAN内容类型处理程序
。。。并且您的代码可以根据需要使用不同的方式(按速度和内存效率顺序列出):
- 连接到G-WAN持久指针的全局原子变量
- 连接到G-WAN持久指针的全局G-WAN KV存储
- 系统共享内存段(它将在服务器停止后幸存)
- 基于内存或磁盘的数据库(SQLite等)
- DB KV存储或服务器(Memcached、Redis、mySQL等)
- 等等
您甚至可以混合使用这些方法,并使用定期存储到磁盘的快速(内存中)方法。
这真的取决于你的需求(计数器跟踪一个页面吗?它每秒提取10000次,100万次吗?等等)
编辑:
好吧,我的错。我读这个问题太快了,对HTTP请求很着迷,忘记了servlet。我想到了一个页面上的简单点击计数器,因此我对原子变量的使用感到好奇。
请接受我的道歉。
尽管如此,我认为优化页面计数器没有什么意义,因为为页面本身提供服务可能会比读取/修改/写入单个变量消耗无限多的CPU和资源。
KV系统已经提供了锁定机制。就效率而言,使用kv_do
原语应该可以处理并发访问,并在可忽略的时间内完成任务。
关于原子变量业务,我就到此为止
现在,多核体系结构对任何应用程序程序员都施加了限制,原子变量似乎是最新流行的灵丹妙药
在花了十几年左右的时间设计嵌入式多任务软件后,并发访问和任务同步一直是一个令人担忧的问题,我的结论是:它们不是。