Tag: zeromq

在轮询器内异步运行代码

在我的ruby脚本中,我使用的是celluloid-zmq gem。 我试图在pollers中使用异步运行evaluate_response, async.evaluate_response(socket.read_multipart) 但是,如果我从循环中删除睡眠,不知怎么说没有成功,它没有达到“evaluate_response”方法。 但是,如果我把睡眠放在循环内,它就能很好 require ‘celluloid/zmq’ Celluloid::ZMQ.init module Celluloid module ZMQ class Socket def socket @socket end end end end class Indefinite include Celluloid::ZMQ ## Readers attr_reader :dealersock,:pullsock,:pollers def initialize prepare_dealersock and prepare_pullsock and prepare_pollers end ## prepare DEALER SOCK def prepare_dealersock @dealersock = DealerSocket.new @dealersock.identity = “IDENTITY” @dealersock.connect(“tcp://localhost:20482”) end ## prepare PULL […]

了解赛璐珞并发

以下是我的赛璐珞代码。 client1.rb 2个客户端之一。 (我把它命名为客户1) client2.rb 2个客户中的第2个。 (命名为客户2) 注意: 上述两个客户端之间唯一的区别是传递给服务器的文本。 ie(分别是’client-1’和’client-2′ ) 在测试这2个客户端(通过并排运行)对后续2个服务器(一次一个)。 我发现很奇怪的结果 。 server1.rb ( 取自celluloid-zmq的README.md的基本示例 ) 使用此作为上述2个客户端的示例服务器导致并行执行任务。 OUTPUT ruby server1.rb Received at 04:59:39 PM and message is client-1 Going to sleep now Received at 04:59:52 PM and message is client-2 注意: client1.rb请求处于hibernate状态时处理client2.rb消息。( 并行标记 ) server2.rb 使用此作为上述2个客户端的示例服务器并未导致并行执行任务。 OUTPUT ruby server2.rb Received at 04:55:52 PM […]

如何处理ZeroMQ + Ruby中的线程问题?

阅读关于线程安全的ZeroMQ常见问题时偶然发现。 我的multithreading程序在ZeroMQ库中的奇怪位置不断崩溃。 我究竟做错了什么? ZeroMQ套接字不是线程安全的。 “指南”中对此进行了详细介绍。 简短版本是不应在线程之间共享套接字。 我们建议为每个线程创建一个专用套接字。 对于每个线程的专用套接字不可行的情况,当且仅当每个线程在访问套接字之前执行完整的内存屏障时,才可以共享套接字。 大多数语言都支持Mutex或Spinlock,它将代表您执行完整的内存屏障。 我的multithreading程序在ZeroMQ库中的奇怪位置不断崩溃。 我究竟做错了什么? 以下是我的以下代码: Celluloid::ZMQ.init module Scp module DataStore class DataSocket include Celluloid::ZMQ def pull_socket(socket) @read_socket = Socket::Pull.new.tap do |read_socket| ## IPC socket read_socket.connect(socket) end end def push_socket(socket) @write_socket = Socket::Push.new.tap do |write_socket| ## IPC socket write_socket.connect(socket) end end def run pull_socket and push_socket and loopify! end […]