Joerg Rossdeutscher wrote:
Am Mo, den 29.12.2003 schrieb Gerald Goebel um 22:27:
Das heißt, alle Variablen sind Threadsafe? Warum benutze ich dann threads und nicht gleich eigene Prozesse?
Da komme ich jetzt mit meinem Wissen nicht mit. "Das Ding" (Prozess, task, thread,...?) wird im Speicher dupliziert. Die Variablen sind, wie in zwei verschiedenen Programmen, völlig unabhängig voneinander. Beide "Dinger" teilen sich aber das gleiche Environment, da das ebenfalls dupliziert wurde, also offene Dateien.
Was du beschreibst ist für seperate Prozesse richtig. Mich verwirrte nur weil du von Threads sprachst. Bei Threads, wird eben nicht alles dupliziert, sondern nur die Variablen, die als Thread-Variablen gekenzeichnet sind. Diese Variablen werden in jedem Thread seperat gehalten, die anderen nicht, auf die kannst du von jedem thread zugreifen, verändern etc. das heißt du brauchst dich um die Komunikation nicht zu kümmern. variable1 = 1 in thread1: solange variable1 < 3 ist wenn variable1 =1 ist mach dies wenn variable1 =2 ist mach das in thread2: zähle von 1 bis 1.000.000 dann setzte variable1 auf 2 und zähle bis 2.000.000 weiter dann setzte variable1 auf 3. beide threads laufen parallel. thread1 läuft genau solange bis thread2 auf 2.000.000 gezählt hat und er das nächstmal die variable1 abfragt, (thread2 bis 1.000.000) -> thread1 macht dies (thread2 bis 2.000.000) -> thread1 macht das Wenn du diese mit Prozessen machen willst, mußt du die ganze Kommunikation selber programmieren. Allerdings, schmiert thread2 ab, reißt er den ganzen Prozess mit (es seiden man fängts ab). Im extremfall bleibt dann auch schon mal ein ganzes OS stehen.
ppid? Du meinst die Prozess-ID?
Nope, ppid = ParentProzessID; ProzessID = pid.
Ich bin mir jetzt zu 99% sicher, das du mit einem Perl arbeitest, welches nicht das nativ fork() benutzt, sondern diese fork-emulation.
Die sollte eigentlich nur unter Windows laufen:
Richtig, ich sagte ja 99%, was 1% doch ausmachen kann. Siehe andere Mail von mir. cu Gerald