Forum: Mikrocontroller und Digitale Elektronik Unterscheid zwischen Blocking und Non-Blocking


von Johannes K. (remy)


Lesenswert?

Hallo liebe Mikrocontroller Kollegen.

Mein Name ist Johannes K. und ich bin neu in diesem Forum und möchte 
mich vorweg bei den Leuten bedanken, die, ohne etwas davon zu 
profitieren, anderen Leuten helfen.

Um auf den Punkt zu kommen, möchte ich gerne wissen, was genau der 
Unterschied (C-Quellcode) zwischen einem Blocking und Non-Blocking 
"System" ist.

Diesbezüglich habe ich mich bisschen im Internet schlau gemacht und habe 
herausgefunden(hoffentlich liege ich richtig), dass ein Blocking 
"System", wie der Name schon sagt, meine CPU blockiert und nur ein 
Prozess bzw. Aufgabe ausgeführt werden kann.

Bei einem Non-Blocking "System" hingegen, die CPU mehrere Prozesse bzw. 
Aufgaben parallel ausführen kann.

Meine Frage wäre jetzt, wie so ein Non-Blocking "System" mit einem 
C-Code  realisierbar wäre oder auf was ich beim Programmieren achten 
muss, um nicht ein Blocking-System zu realisieren?



Mit freundlichen Grüßen Johannes

von Falk B. (falk)


Lesenswert?

Siehe Multitasking

von Peter D. (peda)


Lesenswert?

Johannes K, schrieb:
> Meine Frage wäre jetzt, wie so ein Non-Blocking "System" mit einem
> C-Code  realisierbar wäre oder auf was ich beim Programmieren achten
> muss, um nicht ein Blocking-System zu realisieren?
1
  // non blocking
2
  if( Condition == FALSE )
3
    return;                // try again on next turn
4
  // blocking
5
  while( Condition == FALSE ); // wait until St.-Nimmerleinstag

von Max Nilp (Gast)


Lesenswert?

Blocking bedeutet das Programm blockiert an einer oder mehreren Stellen 
bis es aufgrund eines erwarteten Ereignisses weitergeht. Das is 
teilweise schwer zu debuggen, wenn man den Ueberblick ueber die 
Zustaende verloren hat.
Nonblocking bedeutet das Gegenteil. Das Programm agiert auf Ereignisse, 
wartet aber nirgendwo.

von c-hater (Gast)


Lesenswert?

Johannes K, schrieb:

> Diesbezüglich habe ich mich bisschen im Internet schlau gemacht und habe
> herausgefunden(hoffentlich liege ich richtig), dass ein Blocking
> "System", wie der Name schon sagt, meine CPU blockiert und nur ein
> Prozess bzw. Aufgabe ausgeführt werden kann.
>
> Bei einem Non-Blocking "System" hingegen, die CPU mehrere Prozesse bzw.
> Aufgaben parallel ausführen kann.

Naja, ganz so ist das nicht. Was du dir hier angelesen hast, beschreibt 
mehr so der Unterschied zwischen einem Singletask- und einem 
Multitask-System. Das hat nicht unbedingt etwas mit blockierendem oder 
nichtblockierenden Code zu tun.

Man kann in einem Multitasking-System blockierenden Code verwenden und 
auch umgekehrt auch in einem Singletasksystem nichtblockierenden Code.

Das "blockierend" bezieht sich auf den Programmfluß innerhalb einer 
Anwendung. Sobald darin Schleifen vorkommen, in denen auf einen 
bestimmten Zustand oder ein bestimmtes Ereignis gewartet wird, nennt 
man das blockierenden Code. Die typische Hauptschleife 
ereignisgesteuerter Programme hingegen z.B. ist nichtblockierend, weil 
hier typisch auf mehrere Ereignisse gewartet wird und das Eintreten 
jedes dieser Ereignisse zum Verlassen der Warteschleife führt.

Man könnte vielleicht so formulieren: blockierend ist alles, was für 
eine unbestimmte oder zumindest für eine relativ lange Zeit verhindert, 
daß die Anwendung alle für sie relevanten Eingabegrößen erfassen und 
bearbeiten kann. OK, das ist eine ziemlich wabbelige Definition, aber 
eine bessere fällt mir im Moment nicht ein.

von Johannes K. (remy)


Lesenswert?

Vielen Dank für die schnellen Antworten. Jetzt kann ich mir wenigsten 
mehr darunter vorstellen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.