Unterscheid zwischen Blocking und Non-Blocking

#3865451
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
#3865641
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
Gast #3865816
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.
Gast #3865942
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren