Thread-Interna

Alles, was nicht direkt mit Python-Problemen zu tun hat. Dies ist auch der perfekte Platz für Jobangebote.
Grossmeister_C
User
Beiträge: 36
Registriert: Montag 26. Februar 2007, 15:53

Thread-Interna

Beitragvon Grossmeister_C » Dienstag 22. Mai 2007, 18:09

Edit (Leonidas): Aus der Diskussion des Threads "Wie zwei Funktionen Gleichzeitig laufen lassen?" abgetrennt.

Ohne das ich mir Dein Programm genau angesehen habe: Innerhalb eines Prozesses wird das wohl nicht möglich sein. Ich würde Threading empfehlen.
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Dienstag 22. Mai 2007, 18:15

Grossmeister_C hat geschrieben:Innerhalb eines Prozesses wird das wohl nicht möglich sein. Ich würde Threading empfehlen.

Und seit wann ist Threading innerhalb eines Prozesses nicht möglich? :shock: Ich würde sogar so weit gehen, dass Threading (zumindest im Userspace) nur innerhalb von Prozessen möglich ist - jeder Prozess hat mindestens einen Thread.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Grossmeister_C
User
Beiträge: 36
Registriert: Montag 26. Februar 2007, 15:53

Beitragvon Grossmeister_C » Dienstag 22. Mai 2007, 18:33

Leonidas hat geschrieben:
Grossmeister_C hat geschrieben:Innerhalb eines Prozesses wird das wohl nicht möglich sein. Ich würde Threading empfehlen.

Und seit wann ist Threading innerhalb eines Prozesses nicht möglich? :shock: Ich würde sogar so weit gehen, dass Threading (zumindest im Userspace) nur innerhalb von Prozessen möglich ist - jeder Prozess hat mindestens einen Thread.


Du hast mich falsch verstanden. Ich meinte das es nicht möglich ist 2 Funktionen gleichzeitig innerhalb eines einzelnen Prozesses auszuführen.

Gut , wenn wir Erbsen zählen wollen sind natürlich verschiedene Threads eines Prozesses zumindest teilweise auch dem Prozess zugehörig.
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Dienstag 22. Mai 2007, 19:16

Grossmeister_C hat geschrieben:Du hast mich falsch verstanden. Ich meinte das es nicht möglich ist 2 Funktionen gleichzeitig innerhalb eines einzelnen Prozesses auszuführen.

Kann man aber. Ok, wenn man ganz detailiert sein will geht das mit einer CPU nicht, aber mit zwei ist sowas durchaus technisch möglich (aber mit einer CPU kann man wenn man ganz genau ist, auch nur einen Prozess gleichzeitig laufen lassen, trotzdem gibt es Multiprocess-Betriebssysteme). Von Python-Sicht geht das mit dem GIL nicht ganz so gut, weil nur ein Thread Python-Code im selben Moment ausführen kann (C-Module gehen aber in mehreren Threads). Aus Nutzersicht ist das Switching in der Regel ausreichend schnell, so dass er das Gefühl von Gleichzeitigkeit hat. Ich glaube auch, dass es einfach darum geht. Ob der Code gleichzeitig ausgeführt wird oder nicht ist mir als Nutzer völlig egal - ebenso egal wie es implementiert wird, ob nun als Thread/Tasklet/Greenlet oder was auch immer.

Grossmeister_C hat geschrieben:Gut , wenn wir Erbsen zählen wollen sind natürlich verschiedene Threads eines Prozesses zumindest teilweise auch dem Prozess zugehörig.

Und wem ist dann der Rest zugehörig?

Ich glaube wirklich, dass wir irgendwie an uns vorbeisprechen.. vielleicht sehen wir die Sache ja aus zwei verschiedenen Sichtweisen?
Zuletzt geändert von Leonidas am Dienstag 22. Mai 2007, 19:17, insgesamt 1-mal geändert.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Beitragvon mitsuhiko » Dienstag 22. Mai 2007, 19:16

Grossmeister_C hat geschrieben:Gut , wenn wir Erbsen zählen wollen sind natürlich verschiedene Threads eines Prozesses zumindest teilweise auch dem Prozess zugehörig.


Teilweise?
TUFKAB – the user formerly known as blackbird
Grossmeister_C
User
Beiträge: 36
Registriert: Montag 26. Februar 2007, 15:53

Beitragvon Grossmeister_C » Dienstag 22. Mai 2007, 19:42

blackbird hat geschrieben:
Grossmeister_C hat geschrieben:Gut , wenn wir Erbsen zählen wollen sind natürlich verschiedene Threads eines Prozesses zumindest teilweise auch dem Prozess zugehörig.


Teilweise?


Kommt immer drauf an ob User- oder Kernelthread nicht wahr ? Ich weiß jetzt nicht genau wie Pythonthreads im0plementiert sind. Kernelthreads verwenden aber z.B. jeder einen eigenen Stack.
Grossmeister_C
User
Beiträge: 36
Registriert: Montag 26. Februar 2007, 15:53

Beitragvon Grossmeister_C » Dienstag 22. Mai 2007, 19:52

Leonidas hat geschrieben:
Grossmeister_C hat geschrieben:Du hast mich falsch verstanden. Ich meinte das es nicht möglich ist 2 Funktionen gleichzeitig innerhalb eines einzelnen Prozesses auszuführen.

Kann man aber. Ok, wenn man ganz detailiert sein will geht das mit einer CPU nicht, aber mit zwei ist sowas durchaus technisch möglich (aber mit einer CPU kann man wenn man ganz genau ist, auch nur einen Prozess gleichzeitig laufen lassen, trotzdem gibt es Multiprocess-Betriebssysteme).


Ja, das mag theoretisch machbar sein, aber ich gehe hier von einer üblichen 1-Cpu-Umgebung aus.

Leonidas hat geschrieben: Von Python-Sicht geht das mit dem GIL nicht ganz so gut, weil nur ein Thread Python-Code im selben Moment ausführen kann (C-Module gehen aber in mehreren Threads). Aus Nutzersicht ist das Switching in der Regel ausreichend schnell, so dass er das Gefühl von Gleichzeitigkeit hat. Ich glaube auch, dass es einfach darum geht. Ob der Code gleichzeitig ausgeführt wird oder nicht ist mir als Nutzer völlig egal - ebenso egal wie es implementiert wird, ob nun als Thread/Tasklet/Greenlet oder was auch immer.


So geau weiß ich bei Python nicht bescheid, mir ging es nur darum das man schon Threads oder einen 2. Prozess bemühen muss um das gewünschte zu erreichen.

Grossmeister_C hat geschrieben:Gut , wenn wir Erbsen zählen wollen sind natürlich verschiedene Threads eines Prozesses zumindest teilweise auch dem Prozess zugehörig.

Und wem ist dann der Rest zugehörig?[/quote]

Falsche Wortwahl meinerseits. Der Rest ist zwar dem Thread und damit auch dem Parentprozess zugehörig. Der Thread teilt aber z.B. nicht denselben Stack.
BlackJack

Beitragvon BlackJack » Dienstag 22. Mai 2007, 20:13

Threads benutzen nie den selben Stack, egal ob Kernel- oder User-Level. Das würde gar nicht funktionieren.
Grossmeister_C
User
Beiträge: 36
Registriert: Montag 26. Februar 2007, 15:53

Beitragvon Grossmeister_C » Dienstag 22. Mai 2007, 20:18

Eben
BlackJack

Beitragvon BlackJack » Dienstag 22. Mai 2007, 20:43

Häh? Weisst Du noch was Du so geschrieben hast? Jeder dieser Stacks gehört natürlich zu dem Prozess zu dem die Threads gehören. Threads gehören nicht nur "teilweise" zu einem Prozess, sondern komplett.
Grossmeister_C
User
Beiträge: 36
Registriert: Montag 26. Februar 2007, 15:53

Beitragvon Grossmeister_C » Dienstag 22. Mai 2007, 20:54

BlackJack hat geschrieben:Häh? Weisst Du noch was Du so geschrieben hast? Jeder dieser Stacks gehört natürlich zu dem Prozess zu dem die Threads gehören. Threads gehören nicht nur "teilweise" zu einem Prozess, sondern komplett.


Ja , ich weiß noch was ich geschrieben habe. Wie schon erwähnt habe ich mich mißverständlich ausgedrückt. Sicherlich gehört der neue Thread zu dem Prozess. Aber er teilt nicht alles mit diesem.

Ich wollte ursprünglich auch nur ausdrücken das man nicht einfach 2 Funktionen eines Programmes ohne Zuhilfenahme eines neuen Threads oder eines weiteren Prozesses gleichzeitig ausführen kann.

Wie dem auch sei. anscheinend habe ich mich unverständlich ausgedrückt. Bin schon ein wenig müde.
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Dienstag 22. Mai 2007, 22:05

Grossmeister_C hat geschrieben:Ja, das mag theoretisch machbar sein, aber ich gehe hier von einer üblichen 1-Cpu-Umgebung aus.

Das ist nur im Moment so. Sogar der Laptop der neben mir steht hat nicht nur Hyper Threading (das reicht wohl nicht und wurde zumindest vorerst abgeschafft) sondern zwei Cores und ich denke in Zukunft wird sich dieser Trend fortsetzen. Damit sollte das parallele Ausführen zweier Programme durchaus drin sein :)

Grossmeister_C hat geschrieben:So geau weiß ich bei Python nicht bescheid, mir ging es nur darum das man schon Threads oder einen 2. Prozess bemühen muss um das gewünschte zu erreichen.

Klar, aber das ist eigentlich eher die Regel als die Ausnahme. Was noch Ähnlich ist, ist ``asyncore`` bzw. Twisted. Naja und Sprachen die besonders für Concurrency gedacht sind, also Erlang.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
thelittlebug
User
Beiträge: 187
Registriert: Donnerstag 20. Juli 2006, 20:46
Wohnort: Wien
Kontaktdaten:

Beitragvon thelittlebug » Dienstag 22. Mai 2007, 22:40

Kann sich hier bitte ein Mod einschalten, das Thema artet aus :D

lgherby :D
Lambda
User
Beiträge: 25
Registriert: Freitag 27. April 2007, 17:11

Beitragvon Lambda » Mittwoch 23. Mai 2007, 08:18

Leonidas hat geschrieben:Kann man aber. Ok, wenn man ganz detailiert sein will geht das mit einer CPU nicht, aber mit zwei ist sowas durchaus technisch möglich (aber mit einer CPU kann man wenn man ganz genau ist, auch nur einen Prozess gleichzeitig laufen lassen, trotzdem gibt es Multiprocess-Betriebssysteme). Von Python-Sicht geht das mit dem GIL nicht ganz so gut, weil nur ein Thread Python-Code im selben Moment ausführen kann (C-Module gehen aber in mehreren Threads). Aus Nutzersicht ist das Switching in der Regel ausreichend schnell, so dass er das Gefühl von Gleichzeitigkeit hat. Ich glaube auch, dass es einfach darum geht. Ob der Code gleichzeitig ausgeführt wird oder nicht ist mir als Nutzer völlig egal - ebenso egal wie es implementiert wird, ob nun als Thread/Tasklet/Greenlet oder was auch immer.


verstehe ich nicht, auf einem 1CPU system macht das durchaus nen sin, aber unter einem 2CPU+ system wäre doch threading unter python fast sinnlos?
BlackJack

Beitragvon BlackJack » Mittwoch 23. Mai 2007, 08:55

Auf Systemen mit mehreren CPUs oder Kernen macht Threading in Python genausoviel oder wenig Sinn wie bei Ein-Prozessorsystemen. In beiden Fällen bringt es nicht viel, wenn das Problem CPU-lastig ist, aber in beiden Fällen macht es sehr wohl Sinn, wenn es E/A-lastig ist und immer wenn ein Thread bei E/A-Operationen blockiert, ein andere die Zeit nutzen kann.

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder