lug-bg: Използване на нишки [Was: Re: lug-bg: Оптимизация]
- Subject: lug-bg: Използване на нишки [Was: Re: lug-bg: Оптимизация]
- From: Peter Pentchev <roam@xxxxxxxxxxx>
- Date: Fri, 3 Sep 2004 09:56:25 +0300
On Thu, Sep 02, 2004 at 08:36:26PM +0300, Peter StJ wrote:
[snip]
> prelink.. добра идея.. но при мен не видях никаква разлика. въпреки
> тестовете.
Доста хора казват, че KDE и GNOME приложения се справят доста добре с
prelink, вместо да зареждат по 1023 библиотеки при стартирането си и да
resolve-ват всички символи в тях (а това няма как да не отнеме никакво
време).
> NPTL? Абе ти случайно имаш ли приложение дето ползва нишки. Аз в
> момента не се сещам да ползвам такова.
Хмм.. малко по-нагоре в твоето съобщение видях това:
X-Mailer: Sylpheed version 0.9.11claws (GTK+ 1.2.10; i686-pc-linux-gnu)
Бас ловя, че това ползва нишки :) Също както и всички GUI браузъри, и
на практика повечето GUI приложения, а особено тези, които си играят и с
мрежа. Да не говорим вече за SQL сървъри, някои уеб-сървъри (не, Apache
по принцип не ползва нишки, макар че Apache 2 с MPM може и да опитва), и
какво ли не още.
Някой ден, като имаш малко време, пробвай нещо като следното (или на един
ред, и ако го правиш като root, нямаш нужда от sudo):
sudo find /bin /sbin /usr/bin /usr/sbin /usr/local/bin /usr/local/sbin /usr/X11R6/bin /usr/games -type f | sudo xargs file | awk -F: '/ELF.*dynamically.*shared libs/ {print $1}' | sudo xargs ldd | less
...след което в изхода му потърси 'thread' и виж малко по-нагоре името
на програмата - you might be surprised :)
Ако това беше FreeBSD, щях да ти кажа накрая вместо sudo xargs ldd |
less да направиш sudo xargs ldd -f '%a\t%o\t%p\n' | fgrep thread, така
че да показва на един ред името на програмата и името на библиотеката, и
с този fgrep thread директно да се види за какво става дума, но
изглежда, че при повечето Linux дистрибуции ldd не приема format
argument :( Под Linux можеш да симулираш нещо такова, като накрая
направиш:
sudo xargs ldd | awk '/^\// {prog=$1} /^\t.*thread/ {print prog $0}'
Т.е. цялата команда става:
sudo find /bin /sbin /usr/bin /usr/sbin /usr/local/bin /usr/local/sbin /usr/X11R6/bin /usr/games -type f | sudo xargs file | awk -F: '/ELF.*dynamically.*shared libs/ {print $1}' | sudo xargs ldd | awk '/^\// {prog=$1} /^\t.*thread/ {print prog $0}'
Или, ако ще е по-ясно, погледни приложеното скриптче, което прави
същото. Направо го пускаш, то се разхожда по системата ти и ти показва
колко от програмите ти наистина използват нишки.
На всичкото отгоре може и да не успее да хване всички - примерно
най-вероятно няма да успее да хване Mozilla, защото тя има някакви
странни начини за изпълнение с shell script wrapper, който вика нещо
друго, което пък на свой ред изпълнява истинската mozilla-bin, която пък
изобщо не е в /usr/X11R6/bin, а някъде из lib/... пфу. В такъв случай,
и ако имаш още малко време, можеш да замениш в скриптчето SPATH='/bin
/sbin...' с просто SPATH='/' и то ще претърси всичките ти файлови
системи и всичките им директории за изпълними файлове във формат ELF.
Ако искаш пък, можеш да го използваш за търсене на произволна
библиотека, като просто му подадеш низ за търсене като параметър,
например 'findlib.sh fontconfig' или нещо такова. Ако не му подадеш
никакви параметри, търси 'thread', което ще намери и libthread, и
libpthread, и повечето други варианти.
Поздрави,
Петър
--
Peter Pentchev roam@xxxxxxxxxxx roam@xxxxxxxx roam@xxxxxxxxxxx
PGP key: http://people.FreeBSD.org/~roam/roam.key.asc
Key fingerprint FDBA FD79 C26F 3C51 C95E DF9E ED18 B68D 1619 4553
This sentence is false.
Attachment:
pgpfjpd3OtAFN.pgp
Description: PGP signature
|