Thread Safe DiskBufferDriver.addValues ?

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

Thread Safe DiskBufferDriver.addValues ?

Nicolas F.
Administrator
Bonjour

Je m'attaque à la parallélisation de la cartographie. J'ai créé mon ThreadPool. J'aimerai savoir si je dois prendre des dispositions particulières en ce qui concerne la méthode addValues du diskbufferdriver, dois-je utiliser tel quel ou bien faire appel à des sémaphores ou bien une pile intermédiaire ?

merci
Reply | Threaded
Open this post in threaded view
|

Re: Thread Safe DiskBufferDriver.addValues ?

Antoine Gourlay
Salut,

Pour le DiskBufferDriver c'est simple : il n'est pas thread-safe.
A vrai dire rien n'est tread-safe dans le GDMS actuel, et surtout pas les drivers.

Si tu tiens à écrire sur disque parallèlement dans le même fichier (même driver), tu as deux choix :
 * soit tu utilises un lock pour éviter l'appel concurrent à AddValues
 * soit (plus propre et probablement plus performant) tu crées un driver par dessus qui mets les Value[] dans une liste thread-safe (type FIFO), et tu as en parallèle un unique thread qui dépile des Value[] et les écrits dans le DiskBufferDriver.

Autre point :
 * Java est tout sauf pratique pour faire du traitement parallèle. Surtout quand on manipule à la main un ThreadPool. Regarde par exemple du côté de Scala, ou sinon de libraires java spécifiques pour le traitements parallèles.

Enfin, tout ça va changer, la couche de drivers de GDMS2 sera thread-safe (c'est nécessaire pour le changement de moteur SQL qui viendra avec).
Reply | Threaded
Open this post in threaded view
|

Re: Thread Safe DiskBufferDriver.addValues ?

Nicolas F.
Administrator
C'est bon c'est fait.

Mais bon voilà le nombre de classes..
Reply | Threaded
Open this post in threaded view
|

Re: Thread Safe DiskBufferDriver.addValues ?

Nicolas F.
Administrator
In reply to this post by Antoine Gourlay
Il n'y a plus qu'a passer commande d'un processeur Amd 6 cœurs ^^