Cu sau fără pthread?
Sunt câteva ghiduri care propun compilarea Ruby e Linux folosind parametrul --enable-pthread. Pe aceeaşi maşină, un ArchLinux pe 64 de biţi, Ruby cu --enable-pthread:
$ time strace -c ruby -e '1.upto(100000) {|i| i.to_s}'
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
100.00 0.048035 0 200009 rt_sigprocmask
0.00 0.000000 0 6 read
0.00 0.000000 0 15 8 open
0.00 0.000000 0 7 close
0.00 0.000000 0 3 3 stat
0.00 0.000000 0 7 fstat
0.00 0.000000 0 23 mmap
0.00 0.000000 0 7 mprotect
0.00 0.000000 0 1 munmap
0.00 0.000000 0 7 brk
0.00 0.000000 0 14 rt_sigaction
0.00 0.000000 0 1 1 access
0.00 0.000000 0 1 execve
0.00 0.000000 0 1 uname
0.00 0.000000 0 2 getrlimit
0.00 0.000000 0 1 getuid
0.00 0.000000 0 1 getgid
0.00 0.000000 0 2 geteuid
0.00 0.000000 0 2 getegid
0.00 0.000000 0 1 arch_prctl
0.00 0.000000 0 1 1 futex
0.00 0.000000 0 1 set_tid_address
0.00 0.000000 0 1 set_robust_list
------ ----------- ----------- --------- --------- ----------------
100.00 0.048035 200114 13 total
real 0m11.953s
user 0m2.360s
sys 0m6.310s
şi fără --enable-pthread:
$ time strace -c ruby -e '1.upto(100000) {|i| i.to_s}'
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
nan 0.000000 0 4 read
nan 0.000000 0 5 open
nan 0.000000 0 5 close
nan 0.000000 0 5 fstat
nan 0.000000 0 16 mmap
nan 0.000000 0 5 mprotect
nan 0.000000 0 1 munmap
nan 0.000000 0 7 brk
nan 0.000000 0 12 rt_sigaction
nan 0.000000 0 2 rt_sigprocmask
nan 0.000000 0 1 1 access
nan 0.000000 0 1 execve
nan 0.000000 0 1 uname
nan 0.000000 0 1 getrlimit
nan 0.000000 0 1 getuid
nan 0.000000 0 1 getgid
nan 0.000000 0 2 geteuid
nan 0.000000 0 2 getegid
nan 0.000000 0 1 arch_prctl
------ ----------- ----------- --------- --------- ----------------
100.00 0.000000 73 1 total
real 0m0.141s
user 0m0.120s
sys 0m0.000s
Nu sunt decât două ordine de mărime diferenţă.
care e de fapt alternativa? adică chestia implicită?
Dacă cumva alternativa este nptl, atunci e explicabilă diferenţa :)
Da, ştiu, parcă am descoperit apa caldă în sensul că opţiunea default este mai bună decât una setată de mână…
Uitându-mă prin fişierul de configurare, impresia mea e că se instalează fie cu fastthread-ul lui MenTaLguY, fie cu pthread, ceea ar explica într-o oarecare măsură situaţia.
Scuza-ma ca sunt pe alaturi dar nu se putea gasi un nume mai bun decat “futex” ?!
Sau in asta e tot farmecul? =))
futex: Fast Userspace muTEX.
Nu a fost conceput de nişte români, nu a fost intenţia lor să facă o glumiţă, suntem doar noi fraieri că ne amuzăm pe ascuns de la nişte chestii absolut normale :) E ca şi cum în universităţile americane s-ar amuza zilnic de folosirea LaTeX-ului, sau de FAQ-uri.
Cu alte cuvinte, ar trebui să trecem peste treburile astea, că nu mai avem 10 ani.