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
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 |
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.