2012-11-27 15 views
7

Zastanawiam się, co różni się między opcjami "NICI" i "PTHREAD", gdy kompiluję perl 5.16 (i innej wersji) ze źródła portu w freebsd?wątków vs. pthread w perlu

Czy PTHREAD jest posix-threading? (ponieważ -pthread) A jeśli tak, czy preferuje się "NICI"? (ponieważ wydaje się być wstępnie wybrane) nawet na freebsd? A czym jest "THREADS" (wątki jądra?) Z drugiej strony? Jakie są plusy i minusy?

Czy mogę użyć obu w jednej instalacji? Czy to jest sensowne?

Nie ma wiele do znalezienia w połączeniu z perlem, o ile widzę.

dziękuję Jimmy

+0

hum ... Perl ma tylko jeden model gwintowania ('-Dusethreads') – ikegami

+0

hmm :) Ok kompilowanie go z 'THREADS' zmienia konfigurację args z -Dusethreads = n na -Dusethreads = y. 'PTHREADS' dodaje '-pthread' do ldflagów. Sądzę więc, że to nie żart. To robi różnicę, ale zastanawiam się co ?! :/ –

+1

Perl miał inny model gwintowania. To było bardzo zepsute. Prawdopodobnie próbujesz uzyskać dostęp do tego. – ikegami

Odpowiedz

17

Korzystanie z tematów jest jak inni opisali go oczywiście.

Łącze z pthread oznacza, że ​​twój perl jest zbudowany z flagą -pthread. Ma to subtelny, ale ważny efekt. Oznacza to, że po uruchomieniu Perla, dane libc utrzymujące stan dla wątków są inicjowane. Oznacza to, że jeśli twój perl wywoła dlopen() w bibliotece, która jest wątkowana, zadziała poprawnie, zamiast zwisać.

PS. W rzeczywistości jestem osobą, która napisała i wysłała opcję PTHREAD do portu. W rzeczywistości odkryłem niektóre moduły perla, które dlopen() 'd niektórych wątków bibliotek i spowodował perl zawiesić. Zajęło mi trochę czasu, aby dowiedzieć się, dlaczego. Zaufaj mi, chcesz włączyć opcję PTHREAD. Tak naprawdę myślę o usunięciu opcji wyłączenia. Aby uzyskać więcej informacji, zobacz FreeBSD PR 163512 i 163878. Prawdopodobnie powinniśmy przesunąć tę opcję w górę strumienia, aby perl używał tego domyślnie w FreeBSD. Wszystko, co może wywoływać dlopen(), powinno być zbudowane z opcją -pthread.

+0

Po prostu cię kocham!I tak, w odniesieniu do tego, o czym wspomniałeś i do którego się odwołujesz, brzmi to jak dobry pomysł, aby ustawić go jako domyślny. Dzięki jeszcze raz! –

+0

Dziękuję za to wyjaśnienie. Zaproponowałem, aby zawsze linkować perl z pthreads: https://rt.perl.org/Public/Bug/Display.html?id=122906 –