2012-11-27 35 views
7

Ich frage mich, was der Unterschied zwischen den Optionen 'THREADS' und 'PTHREAD' ist, wenn ich Perl 5.16 (und andere Version) von Port-Quelle in freebsd kompilieren?Threads vs. pthread in Perl

Ist das PTHREAD das Posix-Threading? (weil -pthread) Und wenn ja, ist es "THREADS" vorzuziehen? (weil es vorgewählt scheint) sogar auf freebsd? Und was ist "Threads" (Kernel-Threads?) Auf der anderen Seite? Was sind die Vor- und Nachteile?

Kann ich beide in einer Installation verwenden? Ist es sinnvoll?

Es gibt nicht viel zu finden in Kombination mit Perl, soweit ich sehen kann.

Dank viel jimmy

+0

hum ... Perl hat nur ein Threading-Modell ('-Dusthreads') – ikegami

+0

hmm :) Ok Kompilieren mit 'THREADS' ändert die Konfigurationsargumente von -Dusthreads = n zu -Dusthreads = y. Die 'PTHREADS' fügen '-pthread' den ldflags hinzu. Also, ich denke, es ist nicht nur Spaß. Es macht einen Unterschied, aber ich frage mich was ?! :/ –

+1

Perl hatte ein anderes Threading-Modell. Es war sehr kaputt. Sie versuchen wahrscheinlich, darauf zuzugreifen. – ikegami

Antwort

17

Fäden zu verwenden ist, wie andere es natürlich beschrieben haben.

Die Verbindung mit Pthread bedeutet, dass Ihre Perl mit dem Flag -pthread gebaut wird. Dies hat eine subtile, aber wichtige Wirkung. Dies bedeutet, dass beim Starten von Perl die libc-Daten, die den Status für Threads beibehalten, initialisiert werden. Das bedeutet, wenn Ihr Perl dlopen() in einer Bibliothek aufruft, die mit Threads versehen ist, funktioniert es ordnungsgemäß, anstatt zu hängen.

PS. Ich bin eigentlich die Person, die die PTHREAD-Option für den Port geschrieben und festgelegt hat. Ich entdeckte tatsächlich einige Perl-Module, die dloopen() einige Thread-Bibliotheken enthielten und Perl zum Aufhängen brachten. Nahm mich eine Weile, um herauszufinden, warum. Vertrau mir, du willst die PTHREAD-Option aktivieren. Ich denke tatsächlich darüber nach, die Option zum Ausschalten zu entfernen. Für weitere Informationen, siehe FreeBSD PR 163512 und 163878. Wir sollten diese Option wahrscheinlich upstream schieben, so dass Perl dies standardmäßig auf FreeBSD verwendet. Alles, was dlopen() aufrufen kann, sollte wirklich mit -pthread erstellt werden.

+0

Ich liebe dich einfach!Und ja, in Bezug auf das, was Sie erwähnt und referenziert haben, klingt es nach einer guten Idee, es einfach default zu machen. Danke noch einmal! –

+0

Vielen Dank für diese Erklärung. Ich schlug vor, Perl immer mit Pthreads zu verknüpfen: https://rt.perl.org/Public/Bug/Display.html?id=122906 –