[erlang-questions] Terminate process if it is slow at receiving messages

Michael Loftis mloftis@REDACTED
Fri Sep 20 20:29:09 CEST 2013


I never said go synchronous/use acks.  Just send a completely seperate
timing message occasionally.  The mailbox queue is going to normally
(well, depends a little on your code) be worked FIFO.  So throwing a
timing message at the process (possibly even from a completely
different process) occasionally to check it's health.

On Fri, Sep 20, 2013 at 9:38 AM, akonsu <akonsu@REDACTED> wrote:
> thanks. but this would generate twice as much traffic because of the
> acknowledgement responses. Maybe instead of erlang messages I can use
> sockets to communicate?
>
>
> 2013/9/20 Michael Loftis <mloftis@REDACTED>
>>
>> Pretty simple actually...send them a message, perhaps with a timestamp
>> (os:timestamp()) - the expectation is that the process responds back.
>> If it does not at all within your window, kill it.  If it does, but is
>> unacceptably slow, kill it.
>>
>> Not at all difficult.
>>
>> On Fri, Sep 20, 2013 at 8:08 AM, akonsu <akonsu@REDACTED> wrote:
>> > Hello,
>> >
>> > I have posted this question to stackoverflow
>> >
>> > (http://stackoverflow.com/questions/18895614/terminate-process-if-it-is-slow-at-receiving-messages)
>> > and received one helpful response, but I am still not clear about the
>> > right
>> > way to do it.
>> >
>> >  I also have seen this thread:
>> > http://erlang.org/pipermail/erlang-questions/2011-June/059335.html,
>> > which is
>> > somewhat similar but it still did not hep me.
>> >
>> > I would appreciate more help. Here is the question:
>> >
>> >
>> >
>> > I have a data source process that sends messages to worker processes. To
>> > keep memory consumption under control, I need to terminate the workers
>> > that
>> > are slow retrieving their messages from their mailboxes.
>> >
>> > I am new to Erlang, I would appreciate any pointers. If this is
>> > difficult to
>> > accomplish with Erlang messages, maybe I can use sockets? If so, are
>> > there
>> > examples?
>> >
>> > EDIT:
>> >
>> > I have a registered process that reads from the web and generates a lot
>> > of
>> > data. It sends these data to all the "subscribed" processes using Erlang
>> > messages. For each particular piece of data, it sends the same message
>> > to
>> > all subscribers.
>> >
>> > I also have a web server that streams the data that the registered
>> > process
>> > reads. So, when a http client connects, the web server creates a process
>> > and
>> > this process subscribes to the registered process and starts receiving
>> > its
>> > messages.
>> >
>> > The registered process uses monitors to monitor subscribers. The
>> > subscribers
>> > are controlled by the web server, and when a connection is closed, the
>> > process that were serving this connection, dies.
>> >
>> > There is no acknowledgement, that is, subscribers do not respond when a
>> > message is sent to them. Although I can program them this way, but I
>> > think
>> > it is too much traffic.
>> >
>> > Basically I want to close the connection if a http client is too slow.
>> >
>> > _______________________________________________
>> > erlang-questions mailing list
>> > erlang-questions@REDACTED
>> > http://erlang.org/mailman/listinfo/erlang-questions
>> >
>>
>>
>>
>> --
>>
>> "Genius might be described as a supreme capacity for getting its
>> possessors
>> into trouble of all kinds."
>> -- Samuel Butler
>
>



-- 

"Genius might be described as a supreme capacity for getting its possessors
into trouble of all kinds."
-- Samuel Butler



More information about the erlang-questions mailing list