Krautkanal.com

Veröffentlicht am 2016-01-07 17:22:34 in /prog/

/prog/ 8262: Bernd-erklärt-mir-Zeugs Faden (Interrupt und Polling Edition)

justinrhee Avatar
justinrhee:#8262

Hallo Bernd, erkläre er mir Folgendes. Danke.

1. Wie funktioniert Multithreading bei Interrupts, will heißen, wie kann ein spezieller Arbeitsthread den Mainthread einer typischen interrupteten GUI-Anwendung benachrichtigen?
Oder geht das aktiv nur in die andere Richtung?

2. Wie funktioniert das mit Timern und Netzwerkcode?

3. Wie kommt es, dass z.B. Musikwiedergabe trotz scheinbar Polling(?) das System nicht auslastet und der Scheduler das entspannt abkann?

heikopaiko Avatar
heikopaiko:#8265

Ich verstehe zwar nicht vollständig, was du meinst, aber hoffentlich hilft dir das ein wenig weiter.

>1. Wie funktioniert Multithreading bei Interrupts, will heißen, wie kann ein spezieller Arbeitsthread den Mainthread einer typischen interrupteten GUI-Anwendung benachrichtigen?
Oder geht das aktiv nur in die andere Richtung?

Kommt auf die Sprache an. In C++ macht man sowas vermutlich mit mutex (allerding ist das nicht meine Hauptsprache), in Java mit synchronized-Klassen.

>2. Wie funktioniert das mit Timern und Netzwerkcode?
Was genau meinst du damit?

>3. Wie kommt es, dass z.B. Musikwiedergabe trotz scheinbar Polling(?) das System nicht auslastet und der Scheduler das entspannt abkann?
Mehrere Threads, jeder macht nur so viel er muss. Scheduler?

iamgarth Avatar
iamgarth:#8267

>>8262
zu 1.: Der Thread bekommt ein Objekt (ich impliziere OOP) über das der Thread mit dem Hauptprozess kommunizieren kann. Geht natürlich auch in die andere Richtung.

zu 3.: Polling? Auf der Festplatte oder wo meinst du? Der Player dekodiert die Daten und schiebt sie in den Puffer der Soundkarte. Die hat dann erstmal zu tun und die CPU kann sich um andere Prozesse kümmern.

vicivadeline Avatar
vicivadeline:#8269

>>8267
>>8265

Danke. Zu
>Was genau meinst du damit?
Wie funktionieren Timer? Bernd nimmt an, die laufen auch jeweils in einem eigenen Thread und sagen dem OS, dass es eine Bestimmten Intervall warten kann?

Funktioniert das mit Netzwerkpaketen so ähnlich, wie Zweitbernd es mit Soundkarten erklärt hat? Also dass der Netzwerkchip erstmal die Pakete sammelt?

fatihturan Avatar
fatihturan:#8273

Zu 1: Bei allen GUIs, die Bernd kennt, läuft im Hauptfaden einfach eine Endlosschleife. Diese liest in jedem Durchlauf verschiedene Daten aus bestimmten Orten aus und zeichnet daraufhin das Layout entsprechend dieser Daten neu.

Typische Beispiele wären zum einen die Datenstruktur, in der die aktuellen Widgets abgespeichert sind. Zum anderen gibt es meistens eine Liste, in der Nachrichten an den Hauptfaden abgelegt werden können. Im nächsten Durchlauf entfernt der Hauptfaden dann einen oder mehrere Einträge aus dieser Liste und verarbeitet sie entsprechend.

Wenn dein Arbeiterfaden fertig ist, kann er z.B. ein neues Icon-Widget erstellen und (durch Einfügen eines Elementes in die entsprechene Liste) die Nachricht an den Hauptfaden schicken, dass das Widget erstellt wurde und ein bestimmter Bereich auf dem Bildschirm neu gezeichnet werden soll.

Der kritische Moment ist dabei der schreibende Zugriff auf die Widget- und Nachrichtenlisten. Diese Aktion muss mit einem passenden Synchronisierungsmechanismus geschützt werden. Nähere Informationen liefert das Handbuch deines GUI-Rahmenwerks.

anhskohbo Avatar
anhskohbo:#8276

>>8273
Danke Bernd.

syntetyc Avatar
syntetyc:#8280

>>8269
> Also dass der Netzwerkchip erstmal die Pakete sammelt?
Ja, dann löst er einen Interrupt aus der auf den Netzwerkkartentreiber zeigt. Der holt dann die Daten raus und schiebt es weiter an den Netzwerkstapel (z.B. eben IP)

ryanjohnson_me Avatar
ryanjohnson_me:#8282

Warum liest du nicht die Fachliteratur oder den Quellkot eines Tonabspielers?

zu 1. Interrupt ist 2-3 Ebenen tiefer auf Tonkartenfahrer ebene. Was bling-bling oben macht geht den nüscht an. Der Bling-bling thread pollt (periodisch damit es nicht auf die CPU geht) oder wartet_auf_irgndwas (z.B. per select(2)). Das 'Signal' vom Arbeitsthread kann z.B. eine geänderte Variable oder per signal(2) sein. oder eine Kombination, mit signal sagen hier ist was und mit der Variable dann Das_ist_los.

3. Was sollte da gepollt werden? Du schreibst die Daten in das Gerät und das Gerät macht tatatataaaaa. Ärgerlich nur wenn der Puffer von Gerät voll ist, dann blockiert es solange. Kannste auch selbst ausprobieren mit cat(1). Leider muß man vorher die Bitrate ordentlich setzen. Da geht PCM44100 Stereo rein:

#!/bin/sh

exec sox -t .raw -c 2 -r 44100 -sw - -t ossdsp -c 2 -r 44100 -sw /dev/dsp

gretacastellana Avatar
gretacastellana:#8283

Übrigens gab es mal einen Faden wo das auch erwähnt wurde, daß die "Netzkarte" alles mögliche sein kann von einer Art großem Fifo hin zu programmierbaren µC mit Firmware und so. Findet Bernd aber nicht meer, vielleicht auf /c und schon rausgeseiert.

samscouto Avatar
samscouto:#8284

>>/c/204570

keremk Avatar
keremk:#8285

>>8282
>Was sollte da gepollt werden? Du schreibst die Daten in das Gerät und das Gerät macht tatatataaaaa

Demnach wären Echtzeiteffekte z.B. Tonhöhenänderungen in Spielen ja nicht möglich...

pehamondello Avatar
pehamondello:#8286

>>8285
Wieso?
Spiele arbeiten in Frames.
Die Tondaten sind in einem Puffer.
Jeder Frame schreibt wieder ein kleines Stück frische Tondaten an das Tonausgabegerät und kann den Puffer auch modifizieren bzw Daten löschen und einfach neue Daten reinstellen.

vocino Avatar
vocino:#8287

>>8286
Hm, so langsam scheint Bernd es zu verstehen.
Sei Bernd bedankt.

craighenneberry Avatar
craighenneberry:#8288

>>8285

Hab noch nie jemanden gehört der sein Fersagen bei Quak auf die lahme Karte geschoben hat. Ein Frame sind 15..20 ms oder länger, also 4K !

Außerdem hast du eine Verzögerung von etwa - ach scheisse vergessen, sagen wir 100ms..300ms zwischen Geschehen und Geschehen in deinem Kopf. Deswegen merkst du es auch nicht wenn man dir den Schädel wegsprengt.

Für Elektroklavier anwendungen und dergleichen braucht man aber wirklich eine Latenz von sehr sehr wenig.

melvindidit Avatar
melvindidit:#8289

>>8286
So macht man das glaub ich seit der Demo Zeit nicht mehr m(

fffabs Avatar
fffabs:#8324

>>8289
Oha. Hat dein Apfel keinen Audiopuffer? Ist völlig aus der Mode gekommen, was?
Erzähle mir mehr.

Neuste Fäden in diesem Brett: