Tag Archives: stl

why STL sucks

Nu sunt mare fan al claselor din STL si niciodata n-am fost si asta din simplul motiv ca e greu sa te uiti peste sursele lui, de aceea multi nici nu o fac…. dar asta are cam consecinte grave ( cel putin pentru proiectul la care lucrez eu ).

Lucrez la un proiect in care incerc sa folosesc maxim din puterea de calcul a unui calculator cu 8 CPU-uri si ma gandeam eu asa ca ar fi ok sa paralelizez codul pe 8 thread-uri. Zis si facut.

Din cand in cand mai deschid eu task managerul sa vad cam cat putere de calcul suge aplicatia mea si… iaka ce vad

PS: kernelul este destul de stresat de aplicatie.

Per total, o aplicatie cu codul paralelizat, pe 8 threaduri suge aproximativ 30% din procesor…. am zis ca ceva nu e oki si am inceput sa debughez putin. Iaka ce imi zice visual studio:

deci: 1 thread pentru programul principal + 8 thread-uri. Se poate observa ca 5 thread-uri stau intr-o functie _Mtxlock. Deci… ce e cu functia asta? Arata astfel :

deci… mutex… ceea ce e rau la multithreading… Intrebarea? de unde atat de multi mutexi? Raspuns: niste call stackuri:

concluzie: toate lock-uri sunt din cauza claselor din STL : vector / map / list. Chiar daca sunt utilizate clasele doar intr-un singur thread, cel mai mult dureaza interogarea sistemului de operare (SO) care face lock-ul pentru mutex… si SO nu prea rezista la asa flux mare de mutexi…

Sfatul meu: a nu se utiliza stl, cel putin cand se vrea paralelizarea unui process.

Solutia pentru mine??? Cred ca trebuie sa incep sa scot pe rand cate o clasa de stl din cod.