2012-11-27 9 views
7

Mi chiedo quale differenza ci sia tra le opzioni "THREADS" e "PTHREAD" quando compilo perl 5.16 (e altra versione) dalla sorgente della porta in freebsd?thread vs. pthread in perl

Il PTHREAD è la filettatura di posix? (perché -pthread) E se sì, è preferibile a 'FILETTI'? (perché sembra essere preselezionato) anche su FreeBSD? E che cos'è "THREADS" (thread del kernel?) D'altra parte? Quali sono i pro e i contro?

Posso utilizzare entrambi in un'unica installazione? È sensato?

Non c'è molto da trovare in giro in combinazione con Perl, per quanto posso vedere.

grazie molto jimmy

+0

hum ... Perl ha solo un modello di threading ('-Dusethreads') – ikegami

+0

hmm :) Ok compilandolo con 'THREADS' cambia gli argomenti di configurazione da -Dusethreads = n a -Dusethreads = y. Il 'PTHREADS' aggiunge '-pthread' a ldflags. Quindi, immagino che non stia solo scherzando. Fa la differenza, ma mi chiedo cosa ?! :/ –

+1

Perl aveva un diverso modello di threading. Era molto rotto. Probabilmente stai cercando di accedervi. – ikegami

risposta

17

Uso fili è come altri hanno descritto naturalmente.

Il collegamento con pthread indica che perl è stato creato con il flag -pthread. Questo ha un effetto sottile ma importante. Significa che quando perl si avvia, i dati di libc che mantengono lo stato per i thread vengono inizializzati. Ciò significa che se perl chiama dlopen() su una libreria che è thread, funzionerà correttamente, invece di appenderlo.

PS. Sono in realtà la persona che ha scritto e inserito l'opzione PTHREAD sulla porta. In realtà ho scoperto alcuni moduli perl che dlopen() ha creato alcune librerie e ha causato il blocco di Perl. Ci ho messo un po 'a capire perché. Fidati di me, vuoi l'opzione PTHREAD su. In realtà sto pensando di rimuovere l'opzione per disattivarlo. Per maggiori informazioni, vedi PR 163512 e 163878 di FreeBSD. Probabilmente dovremmo spingere questa opzione a monte in modo che perl la usi di default su FreeBSD. Tutto ciò che può chiamare dlopen() dovrebbe essere veramente costruito con -pthread.

+0

Ti voglio bene!E sì, per quanto riguarda ciò che hai citato e fatto riferimento, sembra una buona idea renderlo di default. Grazie ancora! –

+0

Grazie per questa spiegazione. Ho proposto di collegare sempre perl con pthreads: https://rt.perl.org/Public/Bug/Display.html?id=122906 –