Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Core Ultra 7 270K Plus e Core Ultra 7 250K Plus: Intel cerca il riscatto ma ci riesce in parte
Core Ultra 7 270K Plus e Core Ultra 7 250K Plus: Intel cerca il riscatto ma ci riesce in parte
Abbiamo provato le nuove CPU Intel Core Ultra 7 270K Plus e Core Ultra 7 250K Plus: più core e ottimizzazioni al funzionamento interno migliorano le prestazioni, anche in virtù di prezzi annunciati interessanti. A questo si aggiungono nuove ottimizzazioni software. Purtroppo, a fronte di prestazioni di calcolo elevate, il quadro rimane incerto nel gaming, dove l'andamento rimane altalenante. Infine, rimane il problema della piattaforma a fine vita.
PC Specialist Lafité 14 AI AMD: assemblato come vuoi tu
PC Specialist Lafité 14 AI AMD: assemblato come vuoi tu
Il modello "build to order" di PCSpecialist permette di selezionare una struttura base per un sistema, personalizzandolo in base alle specifiche esigenze con una notevole flessibilità di scelta tra i componenti. Il modello Lafité 14 AI AMD è un classico notebook clamshell compatto e potente, capace di assicurare una elevata autonomia di funzionamento anche lontano dalla presa di corrente
Recensione Nothing Phone 4(a): sempre iconico ma ora più concreto
Recensione Nothing Phone 4(a): sempre iconico ma ora più concreto
Nothing con il suo nuovo Phone 4(a) conferma la sua identità visiva puntando su una costruzione che nobilita il policarbonato. La trasparenza resta l'elemento cardine, arricchita da una simmetria interna curata nei minimi dettagli. Il sistema Glyph si evolve, riducendosi nelle dimensioni ma aumentando l'utilità quotidiana grazie a nuove funzioni software integrate e notifiche visive. Ecco tutti i dettagli nella recensione completa
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 19-11-2006, 16:44   #1
dupa
Senior Member
 
L'Avatar di dupa
 
Iscritto dal: Jan 2002
Città: Napoli
Messaggi: 1727
Variabili di una JSP

Sto leggendo una guida alle JSP e non capisco molto una cosa.

Vengono dichiarate delle variabili come:
Codice:
<%!
    String nome;
%>
Alle quali viene assegnato un valore passato da URL:
Codice:
<%
    nome = request.getParameter("nome");
%>
La guida spiega che questo codice potrebbe avere problemi se la JSP venisse chiamata contemporaneamente da più utenti..

Sinceramente non capisco, la JSP viene trasformata in una classe.. due richieste della stessa servlet non generano quindi due oggetti diversi? e visto che ho guardato il codice della servlet e queste variabili non sono "static", come può essere che vengano "condivise" da più istanze della stessa Servlet?

Grazie
__________________
Se buttassimo in un cestino tutto ciò che in Italia non funziona cosa rimarrebbe? Il cestino.

Ultima modifica di dupa : 19-11-2006 alle 16:47.
dupa è offline   Rispondi citando il messaggio o parte di esso
Old 23-11-2006, 00:55   #2
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
T'ho trovato! Avevo letto la domanda e poi m'è sparito da sotto le dita il thread in un amen. Eddovevai!

E' vero che ogni JSP definisce una servlet ma non è vero che due richieste alla stessa servlet siano affidate a due istanze diverse dell'unica classe servlet prodotta.

"non è vero" va letto come "non è richiesto dalle specifiche Servlet". Se non è richiesto, ecco quello che il web application server è autorizzato a fare.

A Qualcuno richiede il servizio associato alla servlet Pippo.
B Se non esiste un'istanza di Pippo, il contenitore la crea (p)
C il contenitore affida ai metodi di servizio di quell'istanza la richiesta

Arriva un'altra richiesta:

il contenitore affida al metodo di servizio di p, istanza di Pippo prima creata, la richiesta.

E se ne arrivano due in contemporanea. Be', non c'è problema, basta che il server crei per ogni richiesta un thread e lasci che sia quel thread ad eseguire il metodo di servizio di p, unica istanza di Pippo.

Più richieste sono o, meglio, possono essere, più thread che eseguono tutte lo stesso metodo dello stesso oggetto di tipo servlet, unica istanza dell'unica classe Servlet prodotta a partire da quella pagina JSP.

I problemi che sorgono sono quelli derivanti dall'accesso concorrente ad una stessa variabile. A dirla tutta, il codice che hai incollato non ha problemi in sè: l'unico effetto bizzarro che potrebbe verificarsi, stando al modello di memoria del linguaggio di programmazione Java, è che il campo nome non abbia mai altro valore che null, nonostante una ridda di invocazioni al metodo di servizio della servlet. La ragione per cui accade è che manca una relazione happens-before tra la scrittura di un valore in un metodo non sincronizzato ed un eventuale ulteriore lettura di quel valore mentre c'è un happens-before tra l'inizializzazione al valore predefinito di un campo e successive letture del valore di quel campo.

Dunque nome è sempre null (in un contesto concorrente consideri il caso pessimo). Anche se fosse diverso da null, il suo valore potrebbe essere uno qualsiasi dei valori assunti da quella variabile man mano che i vari thread masticano il metodo di servizio, che eseguirà:

nome = request.getParameter("nome");

Io scrivo "Gianni", premo "invia" e la servlet è più che autorizzata a salutarmi con un bel:

"Ciao null!!!" o "Ciao Mario"

se "Mario" è il nome inviato da un altro utente la cui richiesta sia gestita dalla stessa servlet. E' anche possibile che mi risponda "Ciao Gianni" ed è persino possibile che lo faccia sempre...ma solo se hai molto

L'unica garanzia che comunque conservi è che il riferimento nome sarà sempre integro (cioè non punta ad un indirizzo inquinato dall'accavallarsi due scritture concorrenti). Il che, pur non essendo poco, non serve a molto.
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 23-11-2006, 12:24   #3
dupa
Senior Member
 
L'Avatar di dupa
 
Iscritto dal: Jan 2002
Città: Napoli
Messaggi: 1727
Quote:
Originariamente inviato da PGI-Bis
T'ho trovato! Avevo letto la domanda e poi m'è sparito da sotto le dita il thread in un amen. Eddovevai!

E' vero che ogni JSP definisce una servlet ma non è vero che due richieste alla stessa servlet siano affidate a due istanze diverse dell'unica classe servlet prodotta.
Grazie con la risposta, effettivamnete ero partito col pressuposto sbagliato che ogni richiesta di una pagina portasse a una creazione di un nuovo oggetto della servlet che gestisce quella pagina, invece considerando problemi di occupazione di memoria per server ultra-stressati, è perfettamente logico che venga mantenuto vivo un solo oggetto della servlet.

Mi domando però, che utilità possono avere questi attributi (non statici) della classe (estesa da Servlet)?

In pratica non possono nè contenere dati relativi a una singola richiesta, visto che potrebbero essere sovrascritti da richieste contemporanee..
E neppure possono contenere ciò che invece contengono i tipici attributi statici, visto che se ad esempio volessi tener conto di quante richieste ci sono in un certo istante di una servlet dovrei usare un attributo static..

Insomma. vorrei capire in che contesto una variabile di questo tipo può avere un'utilità
grazie.
__________________
Se buttassimo in un cestino tutto ciò che in Italia non funziona cosa rimarrebbe? Il cestino.
dupa è offline   Rispondi citando il messaggio o parte di esso
Old 23-11-2006, 16:20   #4
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Supponendo che l'inizializzazione del campo sia thread-safe, cioè che esso possieda un valore iniziale diverso da null leggibile da ogni altro thread che acceda a quel campo, credo che un uso generale ammissibile esista in tutti i casi in cui si debba disporre di un ponte d'accesso ad una risorsa esterna o che il valore conservato nel campo sia in sola lettura. Il caso del contatore è emblematico. Se come contatore usi un campo di istanza allora presupponi che esista una sola istanza della classe Servlet.

Immagino che valga la pena chiarire questa faccenda delle istanze. Le specifiche Servlet 2.4 autorizzano tre situazioni (SRV2.2).
La prima è che esista una sola istanza di una certa classe Servlet e che quell'istanza deve essere l'unica usata dal contenitore per consumare le richieste dei client.
Se la classe servlet è marcata SingleThreadModel (che non si dovrebbe più usare) allora il contenitore può creare più istanze. Può ma non deve. Ciò che deve garantire è che un solo Thread alla volta esegua i metodi di servizio della servlet.
Nel caso di applicazione distribuita la cosa si fa anche più complicata. Qui il contenitore è autorizzato ad avere una sola istanza della classe Servlet ma una sola per ogni JVM usata per la distribuzione dei compiti. La cosa è più complicata perchè in presenza di più JVM e, quindi, di più ClassLoader, i campi statici non sono più univoci.

Da ciò si ricava che:

1. se l'applicazione non è distribuita e la servlet non è SingleThreadModel allora il contenitore web esegue ogni richiesta del client ad un indirizzo associato ad un tipo di servlet attraverso una sola istanza di quella classe servlet (puoi usare un campo di istanza come contatore avendo cura di sincronizzare l'accesso in lettura e scrittura al campo del contatore che mantiene il numero di contatti)
2. se l'applicazione non è distribuita e la servlet è SingleThreadModel allora il contenitore web può usare più istanze della classe servlet ma garantisce che un solo thread alla volta soddisfi le richieste tramite i metodi di servizio delle diverse istanze della servlet (puoi usare un campo statico come contatore senza necessità di sincronizzare la lettura e la scrittura). SingleThreadModel è deprecato.
3. se l'applicazione è distribuita, cioè diverse JVM possono farsi carico dell'esecuzione di uno stesso compito, il contenitore usa a conti fatti diverse istanza della servlet e NON puoi contare neppure sull'unicità dei membri statici.
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Core Ultra 7 270K Plus e Core Ultra 7 250K Plus: Intel cerca il riscatto ma ci riesce in parte Core Ultra 7 270K Plus e Core Ultra 7 250K Plus:...
PC Specialist Lafité 14 AI AMD: assemblato come vuoi tu PC Specialist Lafité 14 AI AMD: assemblat...
Recensione Nothing Phone 4(a): sempre iconico ma ora più concreto Recensione Nothing Phone 4(a): sempre iconico ma...
Corsair Vanguard Air 99 Wireless: non si era mai vista una tastiera gaming così professionale Corsair Vanguard Air 99 Wireless: non si era mai...
Ecovacs DEEBOT T90 PRO OMNI: ora il rullo di lavaggio è ampio Ecovacs DEEBOT T90 PRO OMNI: ora il rullo di lav...
Solo 649€ grazie a un coupon: questa bic...
Ridimensionamento in arrivo per OnePlus?...
Cifre da low cost ma senza esserlo: vide...
Era finito, torna l'anti MacBook Air ASU...
Modem, router e ripetitori Wi-Fi FRITZ! ...
AirTag da 4 pezzi a 89€, AirPods Pro 3 a...
iPad 12 arriverà nel 2026 e sar&a...
AMD per il futuro dell'IA in Corea del S...
L'IA agentica incrementa il rischio cybe...
Rapporto Clusit 2026: finanza e infrastr...
Gli stessi sali che solidificano il tofu...
Il conflitto in Medio Oriente minaccia l...
OnlyFans, scomparso il proprietario Leon...
Le migliori offerte Amazon da leggere in...
Recensioni su Trustpilot non affidabili,...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 08:20.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v