Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra integra un sensore da 1 pollice 8K, ottiche Leica e triplo chip IA. Tra schermo OLED rimovibile, workflow I-Log a 10 bit e stabilizzazione a tre assi, analizziamo le doti tecniche di una gimbal camera pensata per i professionisti
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
DJI Romo 2: tante novità lo rendono un robot completo
DJI Romo 2: tante novità lo rendono un robot completo
Romo 2 è la seconda generazione di robot lavapavimenti di DJI, un modello che si caratterizza per la precisione nel sistema di navigazione e per il funzionamento particolarmente silenzioso. Con le modifiche introdotte in questa seconda versione, e un posizionamento di prezzo più allineato alla concorrenza, rappresenta una valida alternativa sul mercato delle soluzioni di pulizia domestica
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 26-04-2007, 12:46   #1
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
[c]MULTI-THREADS: multi esperti a me!

Avrei un problemino con un modulo che logga msg ed errori di un intero progetto.

Questo progetto ha parecchi threads (e io non sono esperto in 3ds) che potrebbero scrivere contemporaneamente i log quindi chiamare nello stesso istante il modulo log.

Ci sono problemi ? il S.O. ci pensa da solo o devo fare un ulteriore thread che faccia da interfaccia al loggatore ?

grassie
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z Mb - Win Eight SP (1 > yours) 16 Valve
trallallero è offline   Rispondi citando il messaggio o parte di esso
Old 26-04-2007, 12:55   #2
okay
Senior Member
 
Iscritto dal: Feb 2002
Messaggi: 906
Quote:
Originariamente inviato da trallallero Guarda i messaggi
Avrei un problemino con un modulo che logga msg ed errori di un intero progetto.

Questo progetto ha parecchi threads (e io non sono esperto in 3ds) che potrebbero scrivere contemporaneamente i log quindi chiamare nello stesso istante il modulo log.

Ci sono problemi ? il S.O. ci pensa da solo o devo fare un ulteriore thread che faccia da interfaccia al loggatore ?

grassie
no non puoi avere problemi... inoltre i thread non scrivono in contemporanea.
Sono appunto thread quindi uno alla volta con le loro precedenze di privilegio.
Sempre uno alla volta non possono scrivere in contemporanea indipendemente dall'OS.
okay è offline   Rispondi citando il messaggio o parte di esso
Old 26-04-2007, 12:58   #3
beppegrillo
Senior Member
 
L'Avatar di beppegrillo
 
Iscritto dal: Mar 2004
Messaggi: 1455
Quote:
Originariamente inviato da trallallero Guarda i messaggi
Avrei un problemino con un modulo che logga msg ed errori di un intero progetto.

Questo progetto ha parecchi threads (e io non sono esperto in 3ds) che potrebbero scrivere contemporaneamente i log quindi chiamare nello stesso istante il modulo log.

Ci sono problemi ? il S.O. ci pensa da solo o devo fare un ulteriore thread che faccia da interfaccia al loggatore ?

grassie
Stai chiedendo se più thread scrivono sullo stesso file, puoi lasciarlo così oppure devi gestirlo tu?
Non vorrei sbagliarlo, ma prendilo come hint, che io sappia puoi infischiartene solo se questi thread leggono il file, mentre se scrivono devi usare meccanismi di mutex.
Vedi un po se questo può esserti d'aiuto. http://en.wikipedia.org/wiki/File_locking
__________________
Ciao ~ZeRO sTrEsS~
beppegrillo è offline   Rispondi citando il messaggio o parte di esso
Old 26-04-2007, 12:59   #4
beppegrillo
Senior Member
 
L'Avatar di beppegrillo
 
Iscritto dal: Mar 2004
Messaggi: 1455
Quote:
Originariamente inviato da okay Guarda i messaggi
no non puoi avere problemi... inoltre i thread non scrivono in contemporanea.
Sono appunto thread quindi uno alla volta con le loro precedenze di privilegio.
Sempre uno alla volta non possono scrivere in contemporanea indipendemente dall'OS.
Beh non è mica detto scusa, metti che thread 1 stà scrivendo sul file, viene prelazionato da thread 2 e inizia a scrivere sullo stesso file, hai un incosistenza no?
Mica la scrittura su file è una operazione atomica?
__________________
Ciao ~ZeRO sTrEsS~
beppegrillo è offline   Rispondi citando il messaggio o parte di esso
Old 26-04-2007, 13:02   #5
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
Quote:
Originariamente inviato da okay Guarda i messaggi
no non puoi avere problemi... inoltre i thread non scrivono in contemporanea.
Sono appunto thread quindi uno alla volta con le loro precedenze di privilegio.
Sempre uno alla volta non possono scrivere in contemporanea indipendemente dall'OS.
sicuro ? a chiedermelo e´ stato proprio quello che ha "designato" i 3ds e li sta implementando. Quindi immagno si esperto di 3ds ...

Io poi, per motivi di spazio, zippo tutti i log creati eliminando quelli vecchi ma per non appesantire il tutto chiamo in parallelo con una fork il processo zip.

Sicuro che posso star tranquillo ?
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z Mb - Win Eight SP (1 > yours) 16 Valve
trallallero è offline   Rispondi citando il messaggio o parte di esso
Old 26-04-2007, 13:04   #6
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
Quote:
Originariamente inviato da beppegrillo Guarda i messaggi
Beh non è mica detto scusa, metti che thread 1 stà scrivendo sul file, viene prelazionato da thread 2 e inizia a scrivere sullo stesso file, hai un incosistenza no?
infatti mi sembra strano, mi piacerebbe testare ma non so creare i 3ds

Quote:
Originariamente inviato da beppegrillo Guarda i messaggi
Mica la scrittura su file è una operazione atomica?
speriamo di no ... sono contro il nucleare
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z Mb - Win Eight SP (1 > yours) 16 Valve
trallallero è offline   Rispondi citando il messaggio o parte di esso
Old 26-04-2007, 13:11   #7
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
che poi il mio modulo non e´ un processo a parte ma un .o che verra´ linkato a svariati eseguibili che a loto volta creeranno svariati 3ds ...
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z Mb - Win Eight SP (1 > yours) 16 Valve
trallallero è offline   Rispondi citando il messaggio o parte di esso
Old 26-04-2007, 14:03   #8
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Per il log non puoi realizzare una coda di messaggi da scrivere in cui tutti i thread vanno ad accodare le loro richieste così che questa venga svuotata su un thread separato?
Non avresti più problemi di concorrenza in scrittura su file, ma solo di gestione della struttura che userai per la coda.
Così facendo hai in più il vantaggio che i thread non vengono "rallentati" dal processo di scrittura su file.
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 26-04-2007, 14:21   #9
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
Quote:
Originariamente inviato da tomminno Guarda i messaggi
Per il log non puoi realizzare una coda di messaggi da scrivere in cui tutti i thread vanno ad accodare le loro richieste così che questa venga svuotata su un thread separato?
Non avresti più problemi di concorrenza in scrittura su file, ma solo di gestione della struttura che userai per la coda.
Così facendo hai in più il vantaggio che i thread non vengono "rallentati" dal processo di scrittura su file.
e´ quello che vorrebbe evitare il crucco qui. Non so bene perche´ (son qui da poco piu´di 1 settimana) ma penso che sia perche´ abbiamo decine di 3d aperti contemporaneamente.

Grazie comunque
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z Mb - Win Eight SP (1 > yours) 16 Valve
trallallero è offline   Rispondi citando il messaggio o parte di esso
Old 26-04-2007, 14:34   #10
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
Quote:
Originariamente inviato da beppegrillo Guarda i messaggi
Stai chiedendo se più thread scrivono sullo stesso file, puoi lasciarlo così oppure devi gestirlo tu?
Non vorrei sbagliarlo, ma prendilo come hint, che io sappia puoi infischiartene solo se questi thread leggono il file, mentre se scrivono devi usare meccanismi di mutex.
Vedi un po se questo può esserti d'aiuto. http://en.wikipedia.org/wiki/File_locking
infatti ho provato a creare 5 threads (grazie ad uno stupido esempio in rete) e scrive veramente alla caxxo
grazie do un´occhiata.
Mi e´ appena venuto il crucco a dire che forse con il flag O_SYNC al file si risolve ...
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z Mb - Win Eight SP (1 > yours) 16 Valve
trallallero è offline   Rispondi citando il messaggio o parte di esso
Old 26-04-2007, 14:49   #11
beppegrillo
Senior Member
 
L'Avatar di beppegrillo
 
Iscritto dal: Mar 2004
Messaggi: 1455
Quote:
Originariamente inviato da trallallero Guarda i messaggi
infatti ho provato a creare 5 threads (grazie ad uno stupido esempio in rete) e scrive veramente alla caxxo
grazie do un´occhiata.
Mi e´ appena venuto il crucco a dire che forse con il flag O_SYNC al file si risolve ...
O_SYNC
Write I/O operations on the file descriptor complete as defined by synchronised I/O file integrity completion.

Boh prova, sicuramente fai molto prima così, che ad esempio una cosa simile:
pthread_mutex_lock(mutex_scrittura)
fd = open(file,"rw");
write(fd,'blah',..)
close(fd)
pthread_mutex_unlock(mutex_scrittura)
__________________
Ciao ~ZeRO sTrEsS~
beppegrillo è offline   Rispondi citando il messaggio o parte di esso
Old 26-04-2007, 14:52   #12
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
Quote:
Originariamente inviato da beppegrillo Guarda i messaggi
mentre se scrivono devi usare meccanismi di mutex.
se ho capito bene il lock rallenta il tutto perche´ ogni chiamante aspetta il turno suo. Ovvero perdita di prestazioni. Purtroppo penso che non sia la soluzione giusta in questo progetto.


Quote:
Originariamente inviato da tomminno Guarda i messaggi
Per il log non puoi realizzare una coda di messaggi da scrivere in cui tutti i thread vanno ad accodare le loro richieste così che questa venga svuotata su un thread separato?
Non avresti più problemi di concorrenza in scrittura su file, ma solo di gestione della struttura che userai per la coda.
Così facendo hai in più il vantaggio che i thread non vengono "rallentati" dal processo di scrittura su file.
si mi sa che e´ l´unica strada ... hai qualche esempio ?
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z Mb - Win Eight SP (1 > yours) 16 Valve
trallallero è offline   Rispondi citando il messaggio o parte di esso
Old 26-04-2007, 14:53   #13
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
Quote:
Originariamente inviato da beppegrillo Guarda i messaggi
O_SYNC
Write I/O operations on the file descriptor complete as defined by synchronised I/O file integrity completion.

Boh prova, sicuramente fai molto prima così, che ad esempio una cosa simile:
pthread_mutex_lock(mutex_scrittura)
fd = open(file,"rw");
write(fd,'blah',..)
close(fd)
pthread_mutex_unlock(mutex_scrittura)
mizzeca! non basta la write in mutex ? ogni scrittura deve essere un´apertura chiusura ?
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z Mb - Win Eight SP (1 > yours) 16 Valve
trallallero è offline   Rispondi citando il messaggio o parte di esso
Old 26-04-2007, 15:18   #14
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
correggetemi se sbaglio per favore:
ho messo un
Codice:
pthread_mutex_lock(&mutex);
...
fprintf(...);
...
pthread_mutex_unlock(&mutex);
e va tutto a meraviglia.

Ma e´ piu´ lento o no ?
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z Mb - Win Eight SP (1 > yours) 16 Valve
trallallero è offline   Rispondi citando il messaggio o parte di esso
Old 26-04-2007, 15:22   #15
beppegrillo
Senior Member
 
L'Avatar di beppegrillo
 
Iscritto dal: Mar 2004
Messaggi: 1455
Quote:
Originariamente inviato da trallallero Guarda i messaggi
correggetemi se sbaglio per favore:
ho messo un
Codice:
pthread_mutex_lock(&mutex);
...
fprintf(...);
...
pthread_mutex_unlock(&mutex);
e va tutto a meraviglia.

Ma e´ piu´ lento o no ?
Beh si, puoi ad esempio scrivere su un buffer come ti ha suggerito qualcuno.
Però a stò punto devi vedere quanto ti conviene, perchè col buffer hai alcuni svantaggi :
1)nuove strutture dati
2)overhead dovuto al processo thread che deve svuotarlo nel file
3)e credo che anche quando aggiungi roba al buffer, devi usare la mutua esclusione
In poche parole, dipende un po da quanti thread hai e da quanto lavorano.
__________________
Ciao ~ZeRO sTrEsS~
beppegrillo è offline   Rispondi citando il messaggio o parte di esso
Old 26-04-2007, 15:27   #16
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
Quote:
Originariamente inviato da beppegrillo Guarda i messaggi
Beh si, puoi ad esempio scrivere su un buffer come ti ha suggerito qualcuno.
Però a stò punto devi vedere quanto ti conviene, perchè col buffer hai alcuni svantaggi :
1)nuove strutture dati
2)overhead dovuto al processo thread che deve svuotarlo nel file
3)e credo che anche quando aggiungi roba al buffer, devi usare la mutua esclusione
In poche parole, dipende un po da quanti thread hai e da quanto lavorano.
beh, questa soluzione (mutex) e´ stata accetta dal krukken per adesso. Ha detto che ha trovato altri punti deboli nei 3ds quindi prima risolvera´ quelli poi se ne riparla.
Grazie a tutti
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z Mb - Win Eight SP (1 > yours) 16 Valve
trallallero è offline   Rispondi citando il messaggio o parte di esso
Old 26-04-2007, 15:38   #17
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Voto per la soluzione di Tommino. Sincronizzando sull'operazione di scrittura (lock - print - lock) ognuno dei Thread che vuole inviare un messaggio di log deve attendere per il tempo necessario a scrivere i dati. Se i dati finiscono su un disco fisso l'attesa può essere rilevante.

Se usi una coda concorrente con un Thread che la svuota, ogni Thread deve attendere per il tempo necessario a copiare il messaggio o un puntatore al messaggio da una fetta di RAM ad un'altra.

Poichè idealmente la rapidità di stoccaggio dei messaggi nella coda è più elevata della velocità di scrittura degli stessi (cioè il rubinetto è molto grande e lo scarico molto piccolo) devi anche introdurre un blocco euristico sull'accodamento dei messaggi. Del genere se il totale dei messaggi passa i dieci megabyte l'accodamento viene bloccato finchè le dimensioni della coda non tornino sotto ad un certo livello di guardia.

Nota che il sistema ti consente di ottimizzare le operazioni di scrittura facendo in modo che essa avvenga non ad ogni messaggio ma, ad esempio, al raggiungimento di un numero di byte ottimale per la scrittura. Ad esempio si potrebbe pensare di scrivere i dati a blocchi di dimensioni pari ad un multiplo della dimensione di un cluster.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 26-04-2007, 15:50   #18
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
Quote:
Originariamente inviato da PGI-Bis Guarda i messaggi
Voto per la soluzione di Tommino. Sincronizzando sull'operazione di scrittura (lock - print - lock) ognuno dei Thread che vuole inviare un messaggio di log deve attendere per il tempo necessario a scrivere i dati. Se i dati finiscono su un disco fisso l'attesa può essere rilevante.

Se usi una coda concorrente con un Thread che la svuota, ogni Thread deve attendere per il tempo necessario a copiare il messaggio o un puntatore al messaggio da una fetta di RAM ad un'altra.

Poichè idealmente la rapidità di stoccaggio dei messaggi nella coda è più elevata della velocità di scrittura degli stessi (cioè il rubinetto è molto grande e lo scarico molto piccolo) devi anche introdurre un blocco euristico sull'accodamento dei messaggi. Del genere se il totale dei messaggi passa i dieci megabyte l'accodamento viene bloccato finchè le dimensioni della coda non tornino sotto ad un certo livello di guardia.

Nota che il sistema ti consente di ottimizzare le operazioni di scrittura facendo in modo che essa avvenga non ad ogni messaggio ma, ad esempio, al raggiungimento di un numero di byte ottimale per la scrittura. Ad esempio si potrebbe pensare di scrivere i dati a blocchi di dimensioni pari ad un multiplo della dimensione di un cluster.
interessante ma la scrittura a blocchi non puo´ andare perche´ ho creato un sistema con una lista circolare che memorizza n nomi di files e cancella sempre l´ultimo piu´ vecchio e zippa quelli che chiude. Quindi ne crea uno quando raggiunge una tot size, ma a blocchi significherebbe avere dei messaggi spezzati ... non so se puo´andare.
E poi per avere sempre i log aggiornati faccio una fflush ad ogni scrittura. Lo so che rallenta ma se crasha vogliamo sapere perche´.
La coda pero´ mi piace come idea ...
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z Mb - Win Eight SP (1 > yours) 16 Valve
trallallero è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema Insta360 Luna Ultra: la potenza del sensore da 1...
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
Geely EX5, un mese al volante: il SUV elettrico cinese che ci ha sorpreso (quasi) senza riserve Geely EX5, un mese al volante: il SUV elettrico ...
SpaceX ha confermato che Flight 14 sar&a...
Googlebook pronto al debutto: Google apr...
Guida all'acquisto: quale lavapavimenti ...
Google Maps su Android Auto introduce fi...
AMD Ryzen 5 5500F: fino al 16% di presta...
L'ecosistema partner di Microsoft cresce...
Oracle registra un boom nella divisione ...
Amazon Prime Video sfida TikTok con le n...
L'uscita di Rayman Legends Retold &egrav...
Dazio UE sui pacchi extra UE, in Italia ...
La nuova lavatrice smart di Xiaomi ha tr...
Hai una PSP nel cassetto? Questo nuovo p...
Oracle presenta Java 27 con diverse novi...
Il microscopio dell'EPFL vede più...
Volvo avvia la produzione dei nuovi cami...
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: 23:51.


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