Czy mam rację twierdząc, że w przypadku aplikacji internetowych kontener internetowy zajmuje się wielowątkowością?
Większość serwerów WWW (Java i inne, w tym JBoss) stosuje model „jeden wątek na żądanie”, tzn. Każde żądanie HTTP jest w pełni przetwarzane przez dokładnie jeden wątek. Wątek ten często spędza większość czasu czekając na takie rzeczy, jak żądania DB. Kontener WWW utworzy w razie potrzeby nowe wątki.
Niektóre serwery (w ekosystemie Java, głównie Netty ) obsługują asynchroniczną obsługę żądań, albo z modelem „jeden wątek robi wszystko”, albo z czymś bardziej złożonym. Podstawową ideą jest to, że wiele oczekujących wątków marnuje zasoby, więc praca asynchroniczna może być bardziej wydajna.
Jeśli tak, to czy mogę wprowadzić nowe stopnie w aplikacjach internetowych?
Jest to możliwe, ale należy to robić bardzo ostrożnie, ponieważ błędy (takie jak wycieki pamięci lub brak synchronizacji) mogą powodować błędy, które są bardzo trudne do odtworzenia, lub doprowadzić do awarii całego serwera.
Czy ma to jakąś przewagę i w jakim scenariuszu trzeba to zrobić?
Zaletą jest to, że możesz robić rzeczy równolegle. Korzystanie z wątków do poprawy czystości obliczeniowej prędkości jest coś, co powinno nie robić na serwer, jak to spowolnić postępowanie z innych wniosków. Tego rodzaju czynności powinny być wykonywane na osobnym serwerze, prawdopodobnie przy użyciu kolejki zadań.
Uzasadnionym scenariuszem wielowątkowości w kontekście obsługi żądania HTTP może być sytuacja, gdy trzeba uzyskać dostęp do innych zasobów sieciowych, np. Wywołać kilka różnych usług internetowych. Jeśli zrobisz to w jednym czasie, musisz poczekać na zakończenie każdego połączenia. Ale jeśli używasz wielu wątków, całkowity czas oczekiwania jest tylko opóźnieniem pojedynczego najwolniejszego połączenia.
Concurrency Utilities
.