Virtual Threads: 101
Programiści Java pracujący nad aplikacjami serwerowymi stoją przed wieloma wyzwaniami. Nie tylko muszą dbać o ich stabilność i bezpieczeństwo, ale także skalowalność. Gdy aplikacja cieszy się zainteresowaniem i liczba użytkowników rośnie, przygotowują się na większy ruch i m.in. powiększają pule wątków, aby równolegle móc obsługiwać więcej żądań. Niestety, ten sposób skalowania ma swoje ograniczenia. W powszechnie stosowanym modelu thread-per-request (używanym np. przez kontener Tomcat) każde żądanie wymaga osobnego, zasobożernego wątku, który przez większość czasu... po prostu czeka na odpowiedź bazy danych lub API. Zwiększenie puli o setki czy tysiące takich wątków nie przyniesie wymiernych korzyści: zamiast tego doprowadzi do spadku wydajności (procesor marnuje czas na przełączanie kontekstu między wątkami) lub błędu OOME. Jak w takich warunkach poradzić sobie ze skalowaniem? Dołożyć kolejne instancje usługi? Migrować na inny serwer? Przejść na programowanie reaktywne? A może wykorzystać wirtualne wątki? Ten koncept, rozwijany w ramach projektu Loom, stał się stabilną funkcjonalnością w Javie 21. W mojej prezentacji wyjaśnię, czym one są, czym różnią się od wątków platformowych oraz jak je zastosować, aby drastycznie zwiększyć przepustowość aplikacji i efektywnie wykorzystywać zasoby serwera bez drastycznych zmian w codebase.
Paweł Kowalski
Full-stack developer, swobodnie poruszający się zarówno w back-endzie opartym o ekosystem JVM jak i we front-endzie (Angular, React czy vanilla JS). Zwolennik czystego kodu, pasjonujący się destylacją niecodziennych lub skomplikowanych rozwiązań, by później uwarzyć ciekawe prezentacje na bazie zebranych doświadczeń. Po godzinach mąż i ojciec dwójki dzieci, miłośnik ciężkiego brzmienia i pasjonat kettlebell hardstyle. Nie pogardzi też rozwiązywaniem krzyżówek, grą na gitarze czy wszelkiego rodzaju grami zespołowymi. Koneser sucharów i ironicznych żartów.