首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在本地测试并发性?

如何在本地测试并发性?
EN

Stack Overflow用户
提问于 2012-08-14 10:13:26
回答 2查看 443关注 0票数 4

在本地测试并发的最好方法是什么?也就是说,我想测试10个并发命中。我知道像Blitz这样的服务。然而,我正在尝试找到一种更简单的方法来在本地测试竞态条件。

有什么想法吗?也许是通过Curl?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-14 10:21:31

查看Apache Bench (ab)。基本用法非常简单:

代码语言:javascript
复制
ab -n 100 -c 10 http://your.application
票数 5
EN

Stack Overflow用户

发布于 2012-08-14 14:55:48

为了在本地测试测试中的竞态条件,您可以使用这样的帮助器

代码语言:javascript
复制
# call block in a forked process
def fork_with_new_connection(config, object = nil, options={})
  raise ArgumentError, "Missing block" unless block_given?
  options = {
     :stop => true, :index => 0
  }.merge(options)

  fork do
    # stop the process after fork
    Signal.trap('STOP') if options[:stop]
    begin
      ActiveRecord::Base.establish_connection(config)
      yield(object)
    ensure
      ActiveRecord::Base.remove_connection
    end
  end
end

# call multiply times blocks
def multi_times_call_in_fork(count=3, &block)
  raise ArgumentError, "Missing block" unless block_given?
  config = ActiveRecord::Base.remove_connection
  pids = []
  count.times do |index|
    pids << fork_with_new_connection(config, nil, :index=>index, &block)
  end

  # continue forked processes
  Process.kill("CONT", *pids)

  Process.waitall
  ActiveRecord::Base.establish_connection(config)
end

# example
multi_times_call_in_fork(5)  do
  # do something with race conditions
  # add asserts 
end  
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11944869

复制
相关文章

相似问题

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