Beefy Boxes and Bandwidth Generously Provided by pair Networks
Do you know where your variables are?

Re: Simultaneously reading from a file and serving data

by thargas (Deacon)
on Feb 27, 2014 at 19:29 UTC ( #1076437=note: print w/replies, xml ) Need Help??

in reply to Simultaneously reading from a file and serving data

Have you looked at IO::Select? It will allow you to have a loop which is "simultaneously" waiting for input from multiple sources and waiting for outputs to become ready for write and allowing for timeouts. Or you could use the underlying select call.
  • Comment on Re: Simultaneously reading from a file and serving data

Replies are listed 'Best First'.
Re^2: Simultaneously reading from a file and serving data
by sundialsvc4 (Abbot) on Feb 28, 2014 at 13:30 UTC

    select is definitely how I would do it, for several key reasons:

    1. It is architecturally uncomplicated:   the process is actually doing only one thing at a time, even though it is unpredictable what it might do next.
    2. You never have to worry about things being incomplete ... about accidentally sending someone a partial-message that you haven’t finished reading yet.
    3. You can easily prioritize what it is doing, according to the business requirement.
    4. Messy timing issues are generally avoided completely.

    The program itself is really a dispatcher, connected to everything else with nice, flexible pipes and sockets.   It goes to sleep, wakes up with a “honey-do list,” does its chores in whatever sequence it best sees fit, then goes back to sleep again.   As long as none of these things take a significant time to actually do, esp. relative to the others, it all works great.

Log In?

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://1076437]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others wandering the Monastery: (4)
As of 2022-05-25 17:35 GMT
Find Nodes?
    Voting Booth?
    Do you prefer to work remotely?

    Results (90 votes). Check out past polls.