Die Mathe-Redaktion - 21.07.2018 01:51 - Registrieren/Login
Auswahl
ListenpunktHome
ListenpunktAktuell und Interessant ai
ListenpunktArtikelübersicht/-suche
ListenpunktAlle Links / Mathe-Links
ListenpunktFach- & Sachbücher
ListenpunktMitglieder / Karte
ListenpunktRegistrieren/Login
ListenpunktArbeitsgruppen
Listenpunkt2 im Schwätz / Top 15
ListenpunktWerde Mathe-Millionär!
ListenpunktAnmeldung MPCT Juli
ListenpunktFormeleditor fedgeo
Schwarzes Brett
Aktion im Forum
Suche
Stichwortsuche in Artikeln und Links von Matheplanet
Suchen im Forum
Suchtipps

Bücher
Englische Bücher
Software
Suchbegriffe:
Mathematik bei amazon
Naturwissenschaft & Technik
In Partnerschaft mit Amazon.de
Kontakt
Mail an Matroid
[Keine Übungsaufgaben!]
Impressum

Bitte beachten Sie unsere Nutzungsbedingungen, die Distanzierung, unsere Datenschutzerklärung und
die Forumregeln.

Sie können Mitglied werden. Mitglieder können den Matheplanet-Newsletter bestellen, der etwa alle 2 Monate erscheint.

Der Newsletter Okt. 2017

Für Mitglieder
Mathematisch für Anfänger
Wer ist Online
Aktuell sind 189 Gäste und 10 Mitglieder online.

Sie können Mitglied werden:
Klick hier.

Über Matheplanet
 
Zum letzten Themenfilter: Themenfilter:
Matroids Matheplanet Forum Index
Moderiert von matph
Informatik » Programmieren » Suche Buch - Thema Synchrone-, Asynchrone-, Multi-Threading-, Multi-Processing Programmier-Ansätze
Druckversion
Druckversion
Antworten
Antworten
Autor
Kein bestimmter Bereich Suche Buch - Thema Synchrone-, Asynchrone-, Multi-Threading-, Multi-Processing Programmier-Ansätze
pluto25
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 11.07.2018
Mitteilungen: 24
Aus:
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Themenstart: 2018-07-12 19:43


Hallo,

kennt jemand irgendeine gute (zitierfähige) Quelle zum Thema Synchrone- vs. Asynchrone- vs. Multi-Threading- vs. Multi-Processing-Programmierung.

Also wo gut erklärt wird, was die Vorgehensweisen, sowie Vor- und Nachteile sind, wenn ich z.B. auf einem Core ein synchrones oder ein asynchrones Programm laufen lasse, oder mehrere Threads, und wann ein Programm mehrere Cores verwenden könnte, was da die Vor- und Nachteile sind.

Am besten als EBook verfügbar (Springer-Verlag? oder ähnliches).

Die Quelle sollte keine Internetseite sein, sondern etwas, was man auch ohne Probleme zitieren kann, z.B. in einer Arbeit  biggrin


Das ganze am besten nicht auf eine bestimmte Programmiersprache bezogen - es sei denn vll. Python.


NACHTRAG:
Buch darf in den Sprachen Englisch oder Deutsch sein wink



  Profil  Quote  Link auf diesen Beitrag Link
hyperG
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 03.02.2017
Mitteilungen: 468
Aus:
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.1, eingetragen 2018-07-12 23:47


Natürlich gibt es viele Beiträge wie
CPU-Grundlagen: Multithreading
oder ganze Bücher, wo man sich wochenlang aufhalten kann...

Aber bedenke: mit einer langsamen Programmiersprache wird man nur bei Thread-Verdopplung etwa 1,9 mal schneller.

Mit einem optimalen Algorithmus - speziell auf die CPU angepasst - und dann (erst am Ende) parallele Teile per Multithreading optimiert, kann man 22000 mal schneller werden!

Ich selbst habe so zu c++ gefunden (wo man auch 256 und 512 Bit Befehle nutzen kann) und erst am Ende der Optimierung reichen ein paar
OpenMP-Befehle (die bereits die ganze Kleinarbeit sauber erledigen).

Gerade als Anfänger kann man bei sehr vielen Thread-Befehlen viel falsch machen... da bieten sich so viele Programmiersprachen und viele unterschiedliche Techniken an...

Normalerweise ist es umgekehrt: erst lernt man eine Sprache und erst am Ende steigt man tiefer in die Spezialbefehle der festgelegten Sprache ein.

Was Du machen willst ... von "Hinten", also mit dem Wissen eines ganzen Buches über zig Möglichkeiten der CPU an eine Programmiersprache herantreten, die dann oft nur 2 Befehle anbietet...
Dann wirst Du natürlich enttäuscht und hast viel Zeit vertan...



  Profil  Quote  Link auf diesen Beitrag Link
pluto25
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 11.07.2018
Mitteilungen: 24
Aus:
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.2, vom Themenstarter, eingetragen 2018-07-13 10:28


2018-07-12 23:47 - hyperG in Beitrag No. 1 schreibt:


Normalerweise ist es umgekehrt: erst lernt man eine Sprache und erst am Ende steigt man tiefer in die Spezialbefehle der festgelegten Sprache ein.

Was Du machen willst ... von "Hinten", also mit dem Wissen eines ganzen Buches über zig Möglichkeiten der CPU an eine Programmiersprache herantreten, die dann oft nur 2 Befehle anbietet...
Dann wirst Du natürlich enttäuscht und hast viel Zeit vertan...

Vll. habe ich es ein bisschen falsch formuliert :/.

Also Programmiersprachen kenne ich... Javascript, Java, Scala, Python.

Nun bin ich bei Python.

Da bin ich dabei mich in die Module asyncio und threading reinzuarbeiten.

Ich möchte so eine Art P2P-Anwendung erstellen.
Das Problem ist, dass jeder Peer auf der einen Seite eine feste Aufgabe hat, und Daten erfasst - diese soll er durch länger dauernde Prozesse erstmal verarbeiten (verschiedene Berechnungen durchführen etc, dauert ein bisschen)...
Dann soll er auf der anderen Seite aber auch die Verbindung zu den anderen Peers halten, und Nachrichten empfangen und weiterschicken.

Das ganze soll sich nun nicht beißen/gegenseitig beeinflussen, sondern möglichs parallel geschehen. Nicht dass der eine Peer Daten weitersenden soll an den anderen Peer, aber in der Zwischenzeit mit etwas anderen beschäftigt ist, so dass sich der ganze Datenverkehr im Netzwerk beeinflusst wird.

Dafür hätte ich eben etwas gebraucht um zu wissen, was man am besten anwenden kann... letzten Endes sollte eigentlich beides möglichst granular sein - bei asyncio in Python ist das nicht so einfach - diese Berechnungen die ein Peer durchführt kann ich selbst nicht so einfach in mehrere Unterberechnungen unterteilen :/



  Profil  Quote  Link auf diesen Beitrag Link
matph
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 20.11.2006
Mitteilungen: 5355
Aus: A
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.3, eingetragen 2018-07-13 11:17


Hallo,

Sockets haben generell auch nicht-blockierende/asynchronen I/O, extra Bibliothek sollte dafür nicht notwendig sein. Verwalten sollte alles ein Scheduler, mit Multithreading hat dies erstmal nichts zu tun smile

--
mfg
matph


-----------------
Wir müssen wissen, wir werden wissen. Hilbert
Das Buch der Natur ist in der Sprache der Mathematik geschrieben. Galilei



  Profil  Quote  Link auf diesen Beitrag Link
pluto25
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 11.07.2018
Mitteilungen: 24
Aus:
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.4, vom Themenstarter, eingetragen 2018-07-13 11:33


2018-07-13 11:17 - matph in Beitrag No. 3 schreibt:
Hallo,

Sockets haben generell auch nicht-blockierende/asynchronen I/O, extra Bibliothek sollte dafür nicht notwendig sein. Verwalten sollte alles ein Scheduler, mit Multithreading hat dies erstmal nichts zu tun smile

--
mfg
matph

Problem nur, wenn der Buffer der Sockets sehr beschränkt ist?
Ist in meinem Fall so, dass die Zielsysteme sehr kleine Buffer haben, da die Geräte selbst auch einen sehr kleinen Arbeitsspeicher (kB-Bereich) haben... Also die Datei die ausgetauscht werden sollte, sollte vll. 10mal so groß sein wie der Buffer des Sockets es zulässt... möchte das über einen TCP-Socket machen.
Letzten Endes sollen die Geräte die Datei empfangen und in einer Datei abspeichern.
Dann nach Empfang soll das jeweilige Geräte diese Datei wieder auslesen und chunk-weise an einen anderen Peer mittels TCP übermitteln...

Da wie gesagt der Buffer sehr klein ist, kann ich es ja nicht in dem Socket-Buffer einfach so als ganzes zwischenspeichern - er muss ausgelesen werden.

Und der andere Peer sollte aber nicht so lange warten, denn eigentlich muss er beim übersenden dann selbst so lange warten bis er die Datei komplett an den anderen übertragen hat - wenn dieser aber gerade mit seiner anderen Aufgabe beschäftigt ist und seinen Buffer nicht auslesen kann? Dann wartet ja der andere in der Zwischenzeit?

Deshalb hier die Frage ob es nicht mittels asyncio oder threading zu lösen ist?
Und dazu ein bisschen Literatur zum einlesen smile



  Profil  Quote  Link auf diesen Beitrag Link
matph
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 20.11.2006
Mitteilungen: 5355
Aus: A
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.5, eingetragen 2018-07-13 13:03


Hallo,

Keine der genannten Sprachen wird mit Arbeitsspeicher im kB Bereich auskommen, hier wäre jeweils ein Betriebssystem inklusive Interpreter dieser notwendig. Gängige Mikrocontroller in diesem Bereich besitzen ohnehin nur einen Prozessorkern, Multithreading wird daher nicht möglich sein, und vermutlich einen separaten Ethernet Controller, doch über dessen Buffer musst du dir keine Sorgen machen, dieser ist Hardware Managed, und die Kommunikation mit dem Chip läuft i.d.R. über ein synchrones Bus-System. Hier wirst du in Assembler und einem C/C-like Compiler den Code für die entsprechende Hardware schreiben. Einzige Literatur hierzu wird die vom Harwarehersteller bereitgestellte Befehlsreferenz dieser sein smile

--
mfg
matph


-----------------
Wir müssen wissen, wir werden wissen. Hilbert
Das Buch der Natur ist in der Sprache der Mathematik geschrieben. Galilei



  Profil  Quote  Link auf diesen Beitrag Link
pluto25
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 11.07.2018
Mitteilungen: 24
Aus:
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.6, vom Themenstarter, eingetragen 2018-07-13 13:11


2018-07-13 13:03 - matph in Beitrag No. 5 schreibt:
Hallo,

Keine der genannten Sprachen wird mit Arbeitsspeicher im kB Bereich auskommen, hier wäre jeweils ein Betriebssystem inklusive Interpreter dieser notwendig.

--
mfg
matph

Es gibt eine Möglichkeit, mit der man Python3 auf Mikrocontrollern anwenden kann, und damit Python3-Programme realisieren kann:
micropython.org/

Besitzt jedoch nicht die vollständige Sprachbibliothek von Python3.

Aber beispielsweise sind asyncio (uasyncio nennt sich das dort), bzw. threads möglich (Low-Level-Threading).

Sockets usw. ist dort ähnlich wie bei Python3 wink


Und hierfür gibt es auch spezielle Mikrocontroller mit WiFi-Modul... die können dann darüber direkt miteinander kommunizieren (ist auch alles auf der verlinkten Seite zu finden).


Unterstützte Boards findet man hier:
micropython.org/download



  Profil  Quote  Link auf diesen Beitrag Link
pluto25
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 11.07.2018
Mitteilungen: 24
Aus:
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.7, vom Themenstarter, eingetragen 2018-07-13 13:27


Und damit könnte man beispielsweise ein Temperatur-Regel-Netzwerk erstellen.
Jeder Knoten (Mikrocontroller) soll hierbei einen Temperatur-Sensor haben, und Möglichkeiten haben entsprechend auf die Temperaturen (im gesamten Netzwerk gemessen) gewisse Tätigkeiten auszuführen. Er soll hierbei aber jederzeit die Möglichkeit besitzen die Daten mit allen anderen im Netzwerk auszutauschen (damit die anderen entsprechend der jeweiligen Status reagieren können), die Aufgaben sollten sich also nicht gegenseitig blocken oder ein Knoten soll nicht den anderen blocken, weil dieser z.B. gerade mit seiner Hauptaufgabe beschäftigt ist, und der Socket-Buffer voll ist.

Und da gibt es ja prinzipiell in Python Möglichkeiten dies mittels asyncio oder threads zu lösen.

Auch die threads laufen auf einem Kern bei den Microcontrollern, aber die werden ja durch das OS dann gehandelt... also ist es ja Multi-Threading?


edit:
Und größere Datenmengen kann man mittels Auslagerungsdateien ja bewältigen, theoretisch. Also dass die Daten die nicht gerade gebraucht werden, werden einfach als File gespeichert - wenn sie benötigt werden, dann werden sie aus dieser File eben ausgelesen.
So kann das Problem mit dem Arbeitsspeicher auch umgangen werden...



  Profil  Quote  Link auf diesen Beitrag Link
matph
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 20.11.2006
Mitteilungen: 5355
Aus: A
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.8, eingetragen 2018-07-13 14:05


Hallo,

Nimm doch gleich einen Raspberry Pi mit Quad Core Prozessor, 1GB SDRAM, Gigabit Ethernet, OS und vielem mehr, dieser kostet in etwa das gleiche wink

Bei der von dir verlinkten Seite gibt es kein OS, Netzwerk oder ähnliches...

--
mfg
matph


-----------------
Wir müssen wissen, wir werden wissen. Hilbert
Das Buch der Natur ist in der Sprache der Mathematik geschrieben. Galilei



  Profil  Quote  Link auf diesen Beitrag Link
pluto25
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 11.07.2018
Mitteilungen: 24
Aus:
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.9, vom Themenstarter, eingetragen 2018-07-13 14:13


Beispiele:

uasyncio-Modul:

github.com/micropython/micropython-lib/tree/master/uasyncio

Python
def main():
 
    #sockets
 
    def anotherfunction():
        #HoherBerechnungsaufwand, kann sich mittels uasyncio nicht weiter unterteilen
 
    def dosomething1():
        while True:
            uasyncio.sleep_ms(1)
            #gewisse Berechnungen
            uasyncio.sleep_ms(1)
            anotherfunction()
 
    def sharedata():
        #hier die funktionen zur Datenverteilung/empfang
        def empfangetcp():
            #klassischer ServerAnsatz, mit ein paar uasyncio.sleep(1) drinnen, damit dosomething1() hin und wieder arbeiten kann...
 
        while True:
            #socket-listener, ruft dann empfangetcp() auf, sobald etwas reinkommt
 
    loop = uasyncio.get_event_loop()
    try:
        uasyncio.ensure_future(dosomething())
        uasnycio.ensure_future(sharedata())
    except:
        pass
    finally:
        loop.close()
 
 


und als Multi-Threading, dann etwa so:
docs.micropython.org/en/latest/pyboard/library/_thread.html
(ein anderes Modul gibt es da leider nicht)
Python
def main():
 
    #sockets
 
    def anotherfunction():
        #HoherBerechnungsaufwand
 
    def dosomething1():
        while True:
            #gewisse Berechnungen
            anotherfunction()
 
    def sharedata():
        #hier die funktionen zur Datenverteilung/empfang
        def empfangetcp():
            #klassischer ServerAnsatz
 
        while True:
            #socket-listener, ruft dann empfangetcp() auf, sobald etwas reinkommt
 
    try:
        _thread.start_new_thread(dosomething1())
        _thread.start_new_thread(sharedata())
    except:
        print("Error")
 
 


Der listener (bzw. select in Python) ist non-blocking.

Wenn Daten reinkommen, sind die sockets erstmal blocking, damit die gesamte Datei übertragen werden kann (muss in mehreren chunks passieren - da socket-buffer kleiner als Dateigröße)...

Das alles nur ein Beispiel meines Grundgedankens.



[Die Antwort wurde nach Beitrag No.7 begonnen.]



  Profil  Quote  Link auf diesen Beitrag Link
pluto25
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 11.07.2018
Mitteilungen: 24
Aus:
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.10, vom Themenstarter, eingetragen 2018-07-13 14:19


2018-07-13 14:05 - matph in Beitrag No. 8 schreibt:
Hallo,

Nimm doch gleich einen Raspberry Pi mit Quad Core Prozessor, 1GB SDRAM, Gigabit Ethernet, OS und vielem mehr, dieser kostet in etwa das gleiche wink

Bei der von dir verlinkten Seite gibt es kein OS, Netzwerk oder ähnliches...

--
mfg
matph
Daran habe ich auch gedacht, möchte das aber zunächst auf den anderen lösen.

Wie meinst du das mit kein OS? Micropython ist eine Firmware die auf den Mikrocontrollern geflasht wird.

Das Netzwerk erstellt man ja damit... die Mikrocontroller haben WiFi, können in Station-Mode aber auch als Access-Point betrieben werden.

edit:
ok, mit dem OS kannst du Recht haben wink Ist eine Firmware, damit kommt ja jedoch der Mikrocontroller ohne spezielles OS aus...



  Profil  Quote  Link auf diesen Beitrag Link
matph
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 20.11.2006
Mitteilungen: 5355
Aus: A
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.11, eingetragen 2018-07-13 14:42


Hallo,

Das von dir verlinkte Board besitzt weder WiFi noch Ethernet wink

--
mfg
matph


-----------------
Wir müssen wissen, wir werden wissen. Hilbert
Das Buch der Natur ist in der Sprache der Mathematik geschrieben. Galilei



  Profil  Quote  Link auf diesen Beitrag Link
pluto25
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 11.07.2018
Mitteilungen: 24
Aus:
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.12, vom Themenstarter, eingetragen 2018-07-13 14:58


Wegen dem Netzwerk:
docs.micropython.org/en/v1.9.3/esp8266/esp8266/tutorial/network_basics.html
docs.micropython.org/en/latest/pyboard/library/network.html

(Kleiner Unterschied zu Python3 - es gibt hier eben ein spezielles Modul, mit dessen Hilfe man die WiFi-Verbindungen konfigurieren kann...)

[Die Antwort wurde nach Beitrag No.10 begonnen.]



  Profil  Quote  Link auf diesen Beitrag Link
pluto25
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 11.07.2018
Mitteilungen: 24
Aus:
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.13, vom Themenstarter, eingetragen 2018-07-13 15:02


2018-07-13 14:42 - matph in Beitrag No. 11 schreibt:
Hallo,

Das von dir verlinkte Board besitzt weder WiFi noch Ethernet wink

--
mfg
matph

Das  WiPy, der ESP8266, und der ESP32 schon.

Lässt sich alles wie gesagt über das Modul network in MicroPython konfigurien und nutzen (habe die Dinger ja alle)...



  Profil  Quote  Link auf diesen Beitrag Link
matph
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 20.11.2006
Mitteilungen: 5355
Aus: A
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.14, eingetragen 2018-07-13 15:43


Hallo,

WiPy ist nur deutlich teurer und bringt viel weniger Leistung mit als ein Raspberry Pi razz
Auf dem du Linux und eine Python Implementierung oder andere Sprache deiner Wahl benutzen kannst...

--
mfg
matph


-----------------
Wir müssen wissen, wir werden wissen. Hilbert
Das Buch der Natur ist in der Sprache der Mathematik geschrieben. Galilei



  Profil  Quote  Link auf diesen Beitrag Link
pluto25
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 11.07.2018
Mitteilungen: 24
Aus:
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.15, vom Themenstarter, eingetragen 2018-07-13 17:53


Das ist mir schon klar... nur wie schaut es mit Energie-Optionen aus? Kann er denn auch sowie in einen Sleep-Modus gehen und nur das WiFi-Modul anlassen - so dass er in (Mikro-)-Sekunden wieder auf z.B. Eingaben/Inputs reagieren könnte? Also dass das ganze Ding auch energiesparend eingesetzt werden kann?
Und Raspberry Pi dürfte wesentlich langsamer booten, wenn Linux erstmal gestartet werden muss - das ganze ist eben mit den Mikrocontrollern effizienter, wenn es auch auf den Energieverbrauch ankommt. (ich möchte einfach mal meinen, dass ein solcher Mikrocontroller wesentlich weniger Energie verbraucht - und darauf kommt es mir beispielsweise auch an)

Außerdem habe ich auf einem Mikrocontroller, auf dem nur das Python-Programm läuft, welches ich brauche wesentlich weniger Angriffsmöglichkeiten, möchte ich meinen.

Aber bezüglich jetzt der Frage bezüglich Asyncio und Threads - gibt es da irgendwas zu?
(wir gehen einfach mal davon aus, dass ich erstmal kein Raspberry Pi benutze - vll jedoch mal später)



  Profil  Quote  Link auf diesen Beitrag Link
pluto25 hat die Antworten auf ihre/seine Frage gesehen.
Neues Thema [Neues Thema] Antworten [Antworten]    Druckversion [Druckversion]

 


Wechsel in ein anderes Forum:
 Suchen    
 
All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2001-2018 by Matroids Matheplanet
This web site was made with PHP-Nuke, a web portal system written in PHP. PHP-Nuke is Free Software released under the GNU/GPL license.
Ich distanziere mich von rechtswidrigen oder anstößigen Inhalten, die sich trotz aufmerksamer Prüfung hinter hier verwendeten Links verbergen mögen.
Lesen Sie die Nutzungsbedingungen, die Distanzierung, die Datenschutzerklärung und das Impressum.
[Seitenanfang]