POE's "thread-safety" depends on how you intend to use iThreads with POE.

For example, programs cannot run entire POE::Session instances in threads other than the one where POE::Kernel is dispatching events. Perl won't permit the sub-threads to call POE methods in the parent thread.

This may be worked around by treating iThreads as a variation of subprocesses. That is, iThreads may be spawned to handle "sidecar" tasks, and information may be exchanged with the thread running POE.

This is essentially how multiprocessing works, so most developers use fork(), POE::Wheel::Run, POE::Component::Generic, or some other form of multiprocessing instead of bothering with iThreads. Subprocesses tend to use far less memory and run about the same speed as iThreads, so there's not much loss in doing so. fork() is always enabled, but iThreads must be compiled into Perl.

[POE::Component::Pool::Thread] may be another option.

As a footnote, the author of Perl's iThreads implementation was awarded a grant in 2003 to integrate iThreads with POE. Unfortunately he did not deliver a threaded POE implementation.

If you know POE, and you know iThreads, and you want to see them working together, please consider helping to make it happen.

Thank you.