Cytując dokumentację (link poniżej): POE, czyli Perl Object Environment to opensourcowe narzędzie-środowisko do szybkiego tworzenia wielozadaniowych aplikacji sieciowych. Autorzy wymieniają szereg cech, które mają zachęcić do tworzenia rozwiązań w tym frameworku - m.in. szerokie wsparcie dla komunikacji sieciowej, wygodny silnik obsługi zdarzeń, mechanizm kolejkowania komunikatów czy możliwości programowania rozproszonego. POE ma być także remedium na odwieczne problemy związane z wielowątkowością i wieloprocesowością.
Wszystko wygląda niezwykle obiecująco, szczerze mówiąc - trochę zbyt obiecująco. Za wyżej wymienionym wachlarzem funkcjonalności nie podąża jednak popularność POE. Swego czasu na grupie pl.comp.lang.perl (link poniżej) odbyła się krótka dyskusja na temat tego środowiska. Ludzie podkreślali, że POE jest zbyt skomplikowane i te same algorytmy można implementować w dużo prostszy sposób. O ile poziom skomplikowania nie jest argumentem najistotniejszym przy wyborze technologii - liczą się przecież możliwości, o tyle istnienie prostszego alternatywnego sposobu na osiąganie tych samych funkcjonalności może już stanowić czynnik dyskwalifikujący.
POE zacząłem się przyglądać przy okazji poszukiwań technologii, w której mogą być wykonane różne aplikacje przetwarzające duże ilości danych. W grę wchodzi więc zarówno wielowątkowość, jak i usługowy charakter tych aplikacji, które z resztą powinny być w stanie wymieniać między sobą kilka podstawowych komunikatów. Koncepcja nadal się nie wyklarowała - równie dobrze może się wkrótce okazać, że ostateczne rozwiązanie przyjmie kształt farmy wielowątkowych aplikacji (usług), które będą musiały pracować w sposób skoordynowany. Zgodnie z tym, co napisane w dokumentacji - POE powinno dać sobie z tym wszystkim radę.
Jakkolwiek wygoda tworzenia tego typu rozwiązań w POE mogłaby być dla dewelopera całkiem duża, o tyle nie można zapominać o wydajności końcowego produktu, który przecież zorientowany jest na masowe i logicznie skomplikowane operacje na danych. Głównym priorytetem jest więc szybkość przetwarzania. I właśnie w tym obszarze pojawia się największy problem z POE. Chodzi o to, że Perl Object Environment w obecnym kształcie nie wykorzystuje prawdziwych wątków (nie jest thread-safe, mowa oczywiście o wątkach perlowskich - interpreter threads), tylko je w swoisty sposób symuluje. Ma to swoje plusy - nie ma konieczności kopiowania do pamięci interpretera dla każdego nowego wątku, gdyż jest on współdzielony, ale...
...z drugiej strony aplikacje POE, będąc jednowątkowymi, nie są w stanie korzystać z dobrodziejstw systemów wieloprocesorowych i wielordzeniowych, co dla rozwiązania z gatunku data processing jest sporą ujmą. W moim przypadku będzie to chyba argument decydujący. Jeżeli do tworzenia aplikacji wybrany zostanie Perl jako technologia podstawowa (ze względu na natywne wsparcie dla wyrażeń regularnych), to na pewno POE jako framework nie będzie wykorzystany. POE może się jednak świetnie nadawać do innych celów, pewnie jednak się o tym nigdy nie przekonam :)
Więcej informacji:
http://poe.perl.org - Perl Object Environment home
POE: The Perl Object Environment Whitepaper (pdf)
pl.comp.lang.perl: POE (Google Groups)