We wczesnych inkarnacjach Java używała zielonych wątków i wydajność ich była nawet sporo lepsza od natywnych wątków, per: http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.8.9238&rep=rep1&type=pdf Obecnie desktopowe JVMy nie wspierają już zielonych wątków, można je sobie co najwyżej emulować.
Zielonych wątków nie używa się, podając następujące argumenty:
- ograniczone są do jednego rdzenia,
- blokada I/O blokuje całą maszynę wirtualną.
Można to jednak obejść. Można używać asynchronicznego I/O, co wyeliminuje drugi problem. Problem pierwszy może być zaradzony (wtf, nie ma takiego słowa?) poprzez odpalenie tylu natywnych wątków ile jest rdzeni, a potem można tworzyć zielone wątki i przerzucać je na tych kilku natywnych wątkach.
Z tego co na szybko wyczytałem na necie to GHC używa zielonych wątków wraz z "trikami", które opisałem powyżej.
Zielone wątki pozwalają uniezależnić się od przerwań, tzn przełączanie wątków czy procesów można robić całkowicie software'owo. Interesuje mnie to, bo planuję napisać kiedyś własną maszynę wirtualną :)
Ktoś wie czy są jakieś (w miarę) nowe maszyny wirtualne wielowątkowe z zielonymi wątkami i jak stoi ich skalowalność?