gpt4 book ai didi

ruby - EventMachine 中会出现竞争条件吗?

转载 作者:数据小太阳 更新时间:2023-10-29 08:40:13 24 4
gpt4 key购买 nike

“run” block 是否在 EM 中作为一个整体执行(没有上下文切换)?在此示例中,if 子句中是否存在竞争条件?

EventMachine.run {
@current_value = 0
EventMachine::WebSocket.start(:host => "0.0.0.0", :port => 8080, :debug => true) do |ws|
ws.onopen {
@current_value += 1
if @current_value >= 4 # Race condition?
# Code Block
@current_value = 0
end

ws.onmessage { |msg|
# puts msg
}

ws.onclose {
# puts "disconnected"
}
}
end
end

最佳答案

默认情况下,EventMachine 是单线程的,因此除非您引入线程,否则实际上不应该存在任何竞争条件。

事件循环模型意味着您可以快速顺序执行小而简单的操作,而不是需要自己的线程的冗长、阻塞的方法。因此,您永远不应该让两段代码并行执行。

您有责任在您定义的点频繁地将控制权交给事件循环。

关于ruby - EventMachine 中会出现竞争条件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9397423/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com