Rozpoznawał ktoś temat mapowania wątków Java na wątki natywne?
Mam następującą sytuację:
- biblioteka natywna A, która wykorzystuje POSIX Threads (w szczególności korzystam w niej z mechanizmu Thread Local Storage - *pthread_getspecific *)
- biblioteka natywna B, która korzysta z A
- biblioteka natywna C, która również korzysta z A
- biblioteki B i C są od siebie niezależne
Od strony Javy, korzystam z biblioteki B i C poprzez interfejs JNI. Aplikacja Javowa jest wielowątkowa i wywołuje funkcjonalności z biblioteki B i C (dla B i C, operacje wykonywane via JNI są synchronizowane).
Wydaje mi się, że są następujące możliwości:
a) 1:1 - dla wątku JVM odpalany jest wątek natywny i przez cały czas życia wątku javowego, jest on związany z konkretnym wątkiem natywnym
b) 1:M - wątek javowy może być wykonywany przez wiele wątków natywnych (np. java wątek idzie spać, po ponownym obudzeniu może być kontynuowany przez dowolny wątek OS)
..ale możliwe, że coś przeoczyłem.
I ponownie, wydaje mi się, że to mapowanie jest zależne od implementacji JVM, a specyfikacja niekoniecznie musi się do mapowania odnosić.
Teraz pytanie właściwe, jak wątki Javowe mapują się na wątki systemowe? :)