Diskussion:Atomare Operation
Atomare Katastrophe
BearbeitenIm Englischen heißt das atomic. Wahrscheinlich auch ein Kunstwort, aber wenigstens im griechischen Stil, nämlich à la ἀτομικός = Atom-artig.
Atomar ist aber eine kombiniert griechisch-lateinische Kunstbildung von ἀτομ- und -arius, die zudem bei den Kraftwerken und Bomben eingesetzt wird.
Wer hat bloß diese Fehlbildung in die deutsche Informatik eingebracht ?
Warum können wir nicht in der Informatik wie die Engländer von atomisch und Atomizität sprechen ?
-- Nomen4Omen 21:03, 16. Nov. 2011 (CET)
- Weil die WP nicht zur Begriffsfindung dienen soll? --arilou (Diskussion) 14:19, 28. Aug. 2019 (CEST)
Go-Code
BearbeitenIm Abschnitt "atomare Op's in Prog-Sprachen" wurde der folgende Code eingebracht ... ich finde, er zeigt die wesentlichen Punkte nicht, weil hier ein htp-Server mit Ausgaben produziert wird - das ist als "Demo" vielleicht ok, aber nicht zur Konzeptvorstellung - und Go ist nun einmal keine allgemein gelehrte und bekannte Progsprache. Ich stelle den Code einmal hierher, wenn jemand damit was machen will ...
package main
import (
"sync/atomic"
"fmt"
"net/http"
)
func main() {
http.HandleFunc("/", root)
fmt.Println("waiting for requests...")
http.ListenAndServe(":8080", nil)
}
var counter = 0
func root(writer http.ResponseWriter, request *http.Request) {
fmt.Printf("%s\n\n", request)
// Add 1 to "counter" as an atomic operation
count := atomic.AddInt32(&counter, 1)
fmt.Fprintf(writer, "<html><body><pre>")
fmt.Fprintln(writer, request.URL.Path)
fmt.Fprintf(writer, "%d visits\n", count)
fmt.Fprintf(writer, "</pre></body></html>")
}
Ohne die Benutzung der atomaren Operation atomic.AddInt32
wäre vor der Ausgabe durch fmt.Fprintf
ein erneutes Schreiben in counter
durch einen weiteren Prozess möglich. Mit der atomaren Operation ist sichergestellt, dass korrekt inkrementiert und ausgegeben wird.
atomar
BearbeitenDer Begriff "atomar" ist aus der griechischen Bedeutung von ATOM als das UNTEILBARE abgeleitet. Eine atomare Instruktion im engeren Sinne ist ein nicht unterbrechbarer Maschinenbefehl (ASSEMBLER). Z. B.: tas (Test and Set). Die Ausführung dieses Befehls kann nicht durch einen Interrupt oder einen Task-Wechsel unterbrochen werden. Er wird vollständig und ohne Unterbrechungsmöglichkeit ausgeführt. Jede Sequenz, die ebenfalls nicht unterbrochen werden kann, wird daher auch als "atomar" bezeichnet. (nicht signierter Beitrag von Essat (Diskussion | Beiträge) 13:34, 18. Jun. 2019 (CEST))
Zusammenführung von atomarer Operation und Befehl
BearbeitenNatürlich besteht eine Ähnlichkeit zwischen den beiden. Aber doch auch beachtenswerte Unterschiede.
- Atomare Befehle (Instruktionen) sind hardware-mäßig nicht unterbrechbar; atomare Operationen sehr wohl.
- Zur Implementierung von atomaren Operationen benötigt man atomare Befehle.
- Atomare Operationen sind quasi software-mäßig nicht unterbrechbar. Die Software sorgt (mit Checkpoints dafür), dass eine atomare Operation entweder ganz oder gar nicht ausgeführt wird.
Man kann die Begriffe in einem (1) Artikel bearbeiten, wenn man "Konsistenzebenen" einführt. Die atomaren Befehle unterstützen die unterste Konsistenzebene, atomare Datenbank-Operationen (-Transaktionen) sind ziemlich genau ein Ebene höher. Eine weitere Ebene höher sind evtl Jahresabschlüsse von Firmen anzusiedeln. –Nomen4Omen (Diskussion) 20:58, 12. Feb. 2022 (CET)
- Man könnte auch als -hm- Beispiel angeben, dass eine atomare Operation auf "niedriger Ebene" auch aus einem einigen (Assembler-)Befehl bestehen kann ~ dass also der "Verbund an Operationen" auch die Trivialvariante "besteht aus 1 Operation" sein kann. --arilou (Diskussion) 09:24, 14. Feb. 2022 (CET)
- Wenn ein Rechner Nebenläufigkeit (Parallelität) unterstützt – und das tun praktisch alle modernen Klein- und Großrechner – dann kann eine Unterbrechung zwischen zwei beliebigen Instruktionen geschehen, denn der Prozessor bedient dann eine Aktivität, die eine höhere Priorität hat. Um einen "Verbund an Operationen" atomar zu machen, muss ein nicht unerheblicher programmtechnischer Aufwand getrieben werden. Bei Einzeloperationen kommt dafür praktisch kein Bedarf vor. Allerdings müssen manche bei der Programmierung von Semaphoren eingesetzten und besonderen Instruktionen (Compare-and-swap- bzw. Load-Link/Store-Conditional) (als Einzelinstruktionen) atomar sein. –Nomen4Omen (Diskussion) 16:11, 15. Feb. 2022 (CET)
Klein-zu-Groß ?
Bearbeiten"Dabei können die Einzeloperationen wiederum aus kleineren atomaren Operationen bestehen."
Frage an die theoretische Informatik:
können oder müssen?
Oder präziser:
Kann es eine "höhere", also aus mehreren Einzeloperationen zusammengesetzte atomare Operation geben, bei der alle Einzeloperationen nicht-atomar sind? Oder "fällt dann das ganze Gebäude"? Muss mindestens eine der Teiloperationen wiederum atomar sein?
--arilou (Diskussion) 09:34, 14. Feb. 2022 (CET)
- Die Atomizität der Teiloperationen hilft gar nichts: Wenn z.B. Lesen, Inkrementieren und Schreiben eines Speicherwortes jeweils atomar sind, ist die Folge
- reg = speicher;
- reg++;
- speicher = reg;
- deswegen noch lange nicht atomar. --Haraldmmueller (Diskussion) 09:22, 15. Feb. 2022 (CET)
- Ja, es kann eine aus mehreren Einzeloperationen zusammengesetzte atomare Operation geben,
bei der fast alle Einzeloperationen nicht-atomar sind.
- Ja, die Atomizität der Teiloperationen allein schafft es nicht, die zusammengesetzte Operation atomar zu machen. –Nomen4Omen (Diskussion) 16:11, 15. Feb. 2022 (CET)