Beefy Boxes and Bandwidth Generously Provided by pair Networks
The stupid question is the question not asked
 
PerlMonks  

Re^3: threads and their alternatives

by BrowserUk (Pope)
on Sep 30, 2011 at 21:42 UTC ( #928929=note: print w/ replies, xml ) Need Help??


in reply to Re^2: threads and their alternatives
in thread Alternatives to threads for maintaining GUI app responsiveness

AnyEvent is fairly portable

Really? Does it work with files and pipes under Windows?

Does AnyEvent::DBI work on Windows? Cos you certainly wouldn't think so looking at the source:

my $pid = fork; if ($pid) { # parent close $server; } elsif (defined $pid) { # child my $serv_fno = fileno $server; if ($self->{exec_server}) { fcntl $server, &Fcntl::F_SETFD, 0; # don't close the server s +ide exec {$^X} "$0 dbi slave", -e => "require shift; AnyEvent::DBI::serve_fd ($serv_fno +, $VERSION)", $INC{"AnyEvent/DBI.pm"}; POSIX::_exit 124; } else { ($_ != $serv_fno) && POSIX::close $_ for $^F+1..$FD_MAX; serve_fh $server, $VERSION; # no other way on the broken windows platform, even this leak +s # memory and might fail. kill 9, $$ if AnyEvent::WIN32; # and this kills the parent process on windows POSIX::_exit 0; } } else { croak "fork: $!"; } $self->{child_pid} = $pid; $self->_req ( ($self->{on_connect} ? $self->{on_connect} : sub { }), (caller)[1,2], req_open => $dbi, $user, $pass, %dbi_args ); $self }
has a solution to blocking APIs like DBI. ... it spawns an external process which executes the fetch and then passes the results back via IPC.

I guess I could have said "don't have a good solution", but I don't consider starting a new process for each query and then having to squeeze potentially large amounts of structured data through a byte stream, a solution worthy of the name.


Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.


Comment on Re^3: threads and their alternatives
Download Code
Re^4: threads and their alternatives
by Corion (Pope) on Sep 30, 2011 at 21:51 UTC

    So far, I've only used AnyEvent for TCP and timers, and that works well on Windows. I suppose it works well enough with pipes, at least it has lots of Win32-specific code to create a selectable pipe on Win32. I haven't used AnyEvent::DBI, as I'd use a thread instead of an external process if I had the need to do asynchronous DB access on Windows, and the code looks as if it uses features like selectable filehandles, that just aren't conveniently available on Windows...

      I haven't used AnyEvent::DBI, as I'd use a thread instead of an external process

      Then what would be the point of AnyEvent for the OPs problem?


      Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
      "Science is about questioning the status quo. Questioning authority".
      In the absence of evidence, opinion is indistinguishable from prejudice.

        My reply was more in regard to your statement that "there exists no solution" for calling blocking APIs (outside of threads), where I wanted to highlight that there exists no good solution (outside of threads).

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others imbibing at the Monastery: (9)
As of 2014-10-02 10:26 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    What is your favourite meta-syntactic variable name?














    Results (52 votes), past polls