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/[...]238&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ść?


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.