[zeromq-dev] zmq_poll
Serge Aleynikov
serge at aleynikov.org
Sun May 23 17:47:30 CEST 2010
Martin,
I sited SCTP merely as an example of separation of an association from
the transport layer socket, which makes it possible to poll for SCTP
events on a single fd and dispatch the messages to application-level
queues handling association-specific content. It would be fine to have
different OS threads working on those queues interchangeably.
Conceptually the 0MQ socket can be perceived as an SCTP association; 0MQ
socket subscription is like an SCTP stream; and 0MQ app_thread's
signaling fd is like SCTP one-to-many socket.
Though after my initial introduction to 0MQ I believed it would be a
good idea to have a BSD file descriptor associated with each 0MQ socket,
after giving it more thought, it seems unnecessary as it would associate
a 0MQ socket with a wrong OSI layer. The multiplexing problem needed to
be solved by the library is how to route messages between N logical
subscriptions and M transport connections within a single process (as I
understand the actual 0MQ implementation is slightly different as M
transport connections are never shared between 0MQ sockets). A 0MQ
socket is a "user-level queue" associated with one or more
subscriptions. A dispatching engine running in some OS thread would be
triggered when there's an I/O activity and it would read and replicate
incoming messages to application-level 0MQ queues based on details of
the subscription matrix. In cases when application-level code needs
more than 1 0MQ socket, instead of associating them with a file
descriptor for providing an application with ability to poll on multiple
sockets, it could be avoided by registering a notification callback
triggered when there's a message to read. This way no enforcement of
any threading model on the application layer is needed. 0MQ sockets
would be merely light-weight queues for reading/writing messages from
any OS thread context and the user could control how application-level
notification is handled through implementing that functionality in the
callback.
Hope this makes sense. :-)
Serge
On 5/23/2010 5:40 AM, Martin Sustrik wrote:
> Serge,
>
>> BTW, if you are going to spend some time thinking about this, perhaps it
>> would be helpful to take a look at specification of socket API of SCTP
>> protocol in a way how the concept of a connection is separate from an
>> association between endpoints (talking about one-to-many sockets).
>
> How that that apply to 0mq threading issues?
>
> Martin
> _______________________________________________
> zeromq-dev mailing list
> zeromq-dev at lists.zeromq.org
> http://lists.zeromq.org/mailman/listinfo/zeromq-dev
More information about the zeromq-dev
mailing list