首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我们如何在Memcached读操作中阻塞Ruby on Rails,这样它就不会占用CPU?

我们如何在Memcached读操作中阻塞Ruby on Rails,这样它就不会占用CPU?
EN

Stack Overflow用户
提问于 2011-07-16 10:50:17
回答 1查看 282关注 0票数 0

我们有一个守护进程,它扫描表中的脏位,然后将脏行分批调度到delayed_job。为了避免常量的select from data where dirty = 1,我们设置了一个memcached屏障,它包装了表扫描,比如

代码语言:javascript
复制
   loop do # daemon
     until Rails.cache.fetch("have_dirty_rows") do end
     page = 1
     loop do # paginate dirty rows
       dirty_batch = paginate(#:select     => "*",
                           :order      => "id",
                           :per_page   => DIRTY_GET_BATCH_SIZE,
                           :conditions => {:dirty => 1},
                           :page       => page)
       if dirty_batch.empty?
         Rails.cache.write("have_dirty_rows",false)
         break
       end
       ...
       page = page.next
     end
   end

除非我添加一些sleep 0.0001或类似的东西,否则循环仍然会消耗100%的CPU。Ruby/Rails中有没有一种有效的机制可以阻塞像memcached值这样的东西,或者我们可以从memcached值馈送它,这样它就不会一直轮询了?

EN

Stack Overflow用户

发布于 2011-07-17 03:34:07

活动轮询是错误的!这些脏东西是从哪里来的?如果这个进程使用消息队列机制(例如RabbitMQ )来通知其他进程,那会更好。数据库中的某些东西发生了变化。

票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6714954

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档