Slash Boxes
NOTE: use Perl; is on undef hiatus. You can read content, but you can't post it. More info will be forthcoming forthcomingly.

All the Perl that's Practical to Extract and Report

use Perl Log In

Log In

[ Create a new account ]

m4thieu (9274)

  (email not shown publicly)
+ -

  Comment: Re:how to fix ithreads (Score 1) on 2009.07.05 18:55

by m4thieu on 2009.07.05 18:55 (#69295)
Attached to: In defense of Perl ithreads

Works great for that. How about starting ten threads, then passing them a filehandle to work on? That's what I was talking about.

Beside, if you have a lot of stuff loaded (like POE), instead of this trivial exemple, each thread spawn is rather costly.

Read More 14 comments
Comments: 14
+ -

  Comment: how to fix ithreads (Score 1) on 2009.07.04 9:54

by m4thieu on 2009.07.04 9:54 (#69251)
Attached to: In defense of Perl ithreads

ithreads have two problems:

1. When you spawn a thread, it copies the whole environment from the parent thread, variables and code. This results in poor performance when a lot of libraries are loaded.

2. You can't pass a file descriptor from one thread to the other. So you can't create a network server that spawns a thread for each client.

This makes perl one of the only scripting language you can't use to build a multi-threaded network server, without using fancy stuff like Coro, AnyEvent or POE. Those are great libraries, but they are clumsy compared to just spawning a thread with a function to call.

If we could fix #2, then you could spawn a server thread that sends FD to worker threads as it gets them.

Fixing #1 could be done by allowing spawning an empty thread, giving it a module, function name and arguments to call. The new thread would only load the module once spawned, not when perl starts.

Doing this would allow for Erlang style processes, which is basically what POE tries to do, except with a lot of mucking around with NOWAIT calls, and too many callbacks.

Read More 14 comments
Comments: 14