# Wozu ist das USE Flag "threads" ?

## ConiKost

Hallo!

Ich habe schon bei einigen Paketen gesehen, dass es das USE Flag "threads" gibt.

Was genau macht es und wofür ist es gut?

ConiKost

----------

## mrsteven

 :Arrow:  Wikipedia: Multithreading

----------

## ConiKost

Macht das Sin bei älteren CPUs zu aktivieren ?

----------

## hoschi

 *ConiKost wrote:*   

> Macht das Sin bei älteren CPUs zu aktivieren ?

 

Nein, ausser du meinst deinen Dual-Pentium-3 im Keller (oder den Athlon64 X2 neben dir)  :Rolling Eyes: 

----------

## tuxian

Bringt es etwas bei Hyper-Threading?

----------

## ConiKost

Ok, also macht es keinen Sinn beim P1-233 ...

----------

## mrsteven

 *tuxian wrote:*   

> Bringt es etwas bei Hyper-Threading?

 

Vermutlich ja, denn der Prozessor wird so bei aufwändigen Berechnungen eventuell stärker ausgelastet (vorausgesetzt das Programm unterstützt Threading), was eine kürzere Rechenzeit zur Folge hat. Ich habe das aber mangels passender Hardware nicht testen können.

Beim Kompilieren hast du durch dieses Flag keinen Vorteil, da der gcc kein Multithreading kann. Eventuell ist es aber ratsam, etwas mit MAKEOPTS in /etc/make.conf herumzuspielen, also z.B.:

```
MAKEOPTS="-j3"
```

Du musst aber selber durch Probieren herausfinden, was hier die optimale Einstellung ist.

----------

## sschlueter

Das USE-Flag threads bestimmt, dass Anwendungen, die sowohl mit mehreren Prozessen als auch mit mehreren Threads arbeiten können, mit mehreren Threads arbeiten.

Das hat zunächst einmal nichts damit zu tun, ob man ein System mit mehreren CPUs oder eine CPU mit mehreren Kernen hat. hoschi hat da ganz klar Unrecht.

----------

## ConiKost

 *sschlueter wrote:*   

> Das USE-Flag threads bestimmt, dass Anwendungen, die sowohl mit mehreren Prozessen als auch mit mehreren Threads arbeiten können, mit mehreren Threads arbeiten.
> 
> Das hat zunächst einmal nichts damit zu tun, ob man ein System mit mehreren CPUs oder eine CPU mit mehreren Kernen hat. hoschi hat da ganz klar Unrecht.

 

Dann nochmal meine Frage  :Wink: 

Macht das Sinn bei einem P-233MMX Server?

Bei mir wäre das z.B MLDonkey oder Apache ...

----------

## sschlueter

durch die Verwendung von Threads kann man unter Umständen Ressourcen sparen. Sie sind insofern zunächst einmal eine gute Sache.

Aber so pauschal kann man die Frage trotzdem nicht beantworten.

Apache benutzt standardmäßig Prozesse, das Verwaltungsmodell nennt sich MPM-prefork. Es kann aber auch Threads verwenden, in diesem Fall heisst das Verwaltungsmodell MPM-worker. Solange man nur Apache mit statischen Webseiten hat, ist es kein Problem, MPM-worker zu benutzen. Aber wenn man mod_php, mod_perl oder mod_python benutzt, muss man im Einzelfall klären, ob die verwendeten Bibliotheksfunktionen auch "thread-safe" sind. Ich habe da mal für mod_php recherchiert - ohne eindeutiges Ergebnis. Bei mod_perl und mod_python habe ich nicht recherchiert.

Zu MLDonkey kann ich nichts sagen.

Grundsätzlich kann man in diesem Zusammenhang jedoch empfehlen, statt der traditionellen linuxthreads Implementierung die neue Native POSIX Threads Implementierung zu benutzen. Dazu benötigt man einen 2.6er Kernel und glibc mit NPTL-Unterstüzung.

----------

## ConiKost

Ok ... also ich habe momentan GLIBC 2.4-r2 und NPTL ... also aktiviere ich mal die threads  :Wink: 

----------

## sschlueter

Wenn du vorsichtig sein willst, dann setze das USE-Flag nicht global, sondern nur für bestimmte Anwendungen in /etc/portage/package.use

Um zu überprüfen, ob nun Threads oder Prozesse verwendet werden, kann man unter anderem pstree benutzen. Threads werden in geschweiften Klammern angezeigt.

Beispiel:

```
# pstree -G | grep \{

     ├─beagled─┬─beagled-helper───5*[{beagled-helper}]

     │         └─7*[{beagled}]

     ├─evolution-data-───2*[{evolution-data-}]

     │         ├─evolution-alarm───{evolution-alarm}

     ├─mysqld───35*[{mysqld}]

     ├─slapd───4*[{slapd}]

```

Edit: Das mldonkey ebuild scheint Threads empfehlen zu wollen, wenn ich das richtig verstehe!?

 *Quote:*   

> # threads       Enables multiple threads (TURN IT ON YES WILL YA?)

 Last edited by sschlueter on Sat Apr 15, 2006 5:56 pm; edited 1 time in total

----------

## sirro

 *sschlueter wrote:*   

> Ich habe da mal für mod_php recherchiert - ohne eindeutiges Ergebnis.

 

mod_php ist AFAIK threadsave - wenn es auch mit "thread" kompiliert wurde. Wenn die Flags nicht passen, dann meckert der aber auch.

----------

## sschlueter

 *sirro wrote:*   

>  *sschlueter wrote:*   Ich habe da mal für mod_php recherchiert - ohne eindeutiges Ergebnis. 
> 
> mod_php ist AFAIK threadsave - wenn es auch mit "thread" kompiliert wurde. Wenn die Flags nicht passen, dann meckert der aber auch.

 

Ja, aber wenn die PHP-Anwendung ihre eigenen Bibliotheksfunktionen mitbringt, dann ist die Lage wieder völlig unklar.

Ich muss allerdings auch sagen, dass ich eine zeitlang mal Apache mit mpm-worker und mod_php benutzt habe und eine ganze Reihe populärer PHP-Anwendungen ausprobiert habe (Foren, CMSe, ...), ohne jemals auf seltsame Bugs gestossen zu sein. Aber das tückische ist ja wohl anscheinend, dass  diese Fehler unter Umständen nur selten und bei einer gewissen Last auftreten.

Könnte aber auch alles FUD sein. Auf jeden Fall handelt es sich um ein typisches Flamewar-Thema, bei dem die Leute sich die Köpfe einschlagen.

----------

## ConiKost

Muss ich bei Apache mpm-worker als USE Flag auch aktivieren? Oder reicht nur threads ?

----------

## sschlueter

mpm-worker ist default, wenn das USE flag threads gesetzt ist.

(Es gibt noch weitere MPMs ausser mpm-prefork und mpm-worker, aber die anderen sind nicht so ausgiebig getestet und teilweise sogar als experimentell gekennzeichnet.)

----------

## hoschi

 *sschlueter wrote:*   

> Das USE-Flag threads bestimmt, dass Anwendungen, die sowohl mit mehreren Prozessen als auch mit mehreren Threads arbeiten können, mit mehreren Threads arbeiten.
> 
> Das hat zunächst einmal nichts damit zu tun, ob man ein System mit mehreren CPUs oder eine CPU mit mehreren Kernen hat. hoschi hat da ganz klar Unrecht.

 

Da verstehst du mich falsch, ich unterscheide einen Athlon64 X2 und eine Dual-Pentium-3 Maschine nicht. Ich will damit sagen, dass dieses USEFLAG bei einem einzelnen Pentium3 wohl kaum Sinn macht, dagegen aber bei einer Maschine mit zwei Pentium3 Prozessoren oder Athlon64 X2.

Ich unterscheide bei meiner Entscheidung nicht zwischen mehrer Kernen oder mehreren CPUs.

----------

## sschlueter

 *hoschi wrote:*   

> Da verstehst du mich falsch, ich unterscheide einen Athlon64 X2 und eine Dual-Pentium-3 Maschine nicht. Ich will damit sagen, dass dieses USEFLAG bei einem einzelnen Pentium3 wohl kaum Sinn macht, dagegen aber bei einer Maschine mit zwei Pentium3 Prozessoren oder Athlon64 X2.

 

Nene, ich hatte dich schon richtig verstanden, hatte mich nur unklar ausgedrückt.

Warum denkst du, dass dieses USE-Flag bei einem einzelnen Pentium3 keinen Sinn macht?

----------

## schachti

 *hoschi wrote:*   

> 
> 
> Ich will damit sagen, dass dieses USEFLAG bei einem einzelnen Pentium3 wohl kaum Sinn macht, dagegen aber bei einer Maschine mit zwei Pentium3 Prozessoren oder Athlon64 X2.
> 
> 

 

Auch auf einem Einprozessorsystem können Threads sehr viel Sinn machen. Bestes Beispiel ist eine Anwendung, in der ein Thread im Hintergrund rechenintensive Berechnungen durchführt, während ein anderer Thread z. B. für die Aktualisierung der GUI und ein weiterer Thread für das Verarbeiten von Maus- und Tastatureingaben verantwortlich ist.

----------

## SinoTech

 *hoschi wrote:*   

>  *sschlueter wrote:*   Das USE-Flag threads bestimmt, dass Anwendungen, die sowohl mit mehreren Prozessen als auch mit mehreren Threads arbeiten können, mit mehreren Threads arbeiten.
> 
> Das hat zunächst einmal nichts damit zu tun, ob man ein System mit mehreren CPUs oder eine CPU mit mehreren Kernen hat. hoschi hat da ganz klar Unrecht. 
> 
> Da verstehst du mich falsch, ich unterscheide einen Athlon64 X2 und eine Dual-Pentium-3 Maschine nicht. Ich will damit sagen, dass dieses USEFLAG bei einem einzelnen Pentium3 wohl kaum Sinn macht, dagegen aber bei einer Maschine mit zwei Pentium3 Prozessoren oder Athlon64 X2.
> ...

 

Gerade wenn man nur eine CPU mit nur einem Kern hat, und diese evtl. auch noch sehr alt ist, würde ich Threads empfehlen. Diese verbrauchen weniger Resourcen und der Prozesswechsel geht auch schneller. Sehe keinen Grund einen da noch zusätzlichen Prozess rein zuquetschen.

Auf Threads verzichten würde ich dagegen bei mehreren CPU's bzw. mehreren Kernen, da die Prozesse dort eben wirklich parallel laufen können. Da würde die zusätzliche synchronisation mittels Semaphoren nur stören.

Mfg

Sino

----------

## sschlueter

 *SinoTech wrote:*   

> 
> 
> Gerade wenn man nur eine CPU mit nur einem Kern hat, und diese evtl. auch noch sehr alt ist, würde ich Threads empfehlen. Diese verbrauchen weniger Resourcen und der Prozesswechsel geht auch schneller.

 

Ich habe da vor einiger Zeit mal diesen Artikel durchgelesen, der erklärt die verschiedenen Vor- und Nachteile glaube ich ganz gut - hab ihn mir jetzt gerade spontan allerdings nicht erneut durchgelesen.  http://en.wikipedia.org/wiki/Thread_%28computer_science%29

----------

## SinoTech

 *sschlueter wrote:*   

> 
> 
> [...] hab ihn mir jetzt gerade spontan allerdings nicht erneut durchgelesen.  http://en.wikipedia.org/wiki/Thread_%28computer_science%29

 

Nice, aber ist mir für heut abend etwas zu lang der gute Artikel (Bin generell faul, aber abends ist es bei mir noch schlimmer  :Wink: ). Werd ihn aber morgen lesen.

Mfg

Sino

----------

## hoschi

Irgendwie muss mein Hirn beim lesen im Energiesparbetrieb gewesen sein  :Wink: 

Ich habe wohl beim ersten schreiben an seperate Prozess gedacht (Unixdepp halt, es gibt was anderes als seperate Prozesse....niemals  :Very Happy:  ), warum aber weiss ich auch nicht.

Artikel lesen, ist interessant.

----------

