asio asynchron synchron



  • Bei synchronen Operationen kannst du genau 1 Client / Thread haben. Deine maximale Anzahl an Clients ist damit die maximale Anzahl an Threads, die dir dein OS geben will. Mit Asynchronen Operationen liegt die Grenze bei der Hardware.



  • dann ncoh eine frage:pro client braucht man also einen thread und ein socket.
    und bei synchronen operationen müsste man sich also jedes mal neu mit dem client verbinden?



  • Du verstehst das Konzeot nicht so ganz.
    Synchron: Du startest eine Operation und wartest bis sie fertig ist.
    Asynchron: Du startest ein Operation und kannst sofort weitermachen. Sobald die Operation fertig ist, wird ein Callback aufgerufem um dir das Ergebnis mitzuteilen.

    Ansonsten gibt es keine Unterschiede.



  • mit dieser aussage wiedersprichst du eigentlich pi, aber stimmts nun dass mit synchronen operationen nur ein client möglich ist?



  • alterbro schrieb:

    mit dieser aussage wiedersprichst du eigentlich pi, aber stimmts nun dass mit synchronen operationen nur ein client möglich ist?

    Nein, du kannst mehrere Clients auch synchron haben. Es kann aber sehr holprig sein diese zu bedienen.
    Mit select oä. müsstest du herausfinden welche Clients überhaupt etwas gesendet haben bevor du zum Lesen anfängst. Dann hast du noch den Nachteil dass das Lesen/Schreiben genauso langsam ist wie deine Netzwerkschnittstelle. Dh. wenn du einem Client viel sendest, werden andere Clients lange Zeit überhaupt nicht behandelt, da send erst zurückkehrt sobald auch das letzte Byte angekommen ist.

    Bei asynchronen Operationen kümmert sich das Betriebssystem darum, was wie auf die Leitung geht.



  • select ist doch asynchron...



  • 314159265358979 schrieb:

    select ist doch asynchron...

    select ist synchron. Du hast einfach nur den Vorteil nicht zu blockieren bevor überhaupt irgendetwas passiert ist. Der Rest läuft komplett synchron ab.



  • Also nach meiner Definition: blockierend = synchron, nicht blockierend = asynchron



  • ok, also sollte ich doch bei asynchronen operationen bleiben.

    Es hat mich halt einfach genervt wie die biespiele in der doc dermassen verwirrend kompliziert in eine klasse geflochten wurden, aber ok, danke



  • 314159265358979 schrieb:

    select ist doch asynchron...

    Sei doch einfach leise wenn du keine Ahnung hast. 🙄



  • 314159265358979 schrieb:

    Also nach meiner Definition: blockierend = synchron, nicht blockierend = asynchron

    Die Linux-manpages bezeichnen select auch als synchron.

    select, pselect, FD_CLR, FD_ISSET, FD_SET, FD_ZERO - synchronous I/O
    multiplexing

    Außerdem blockiert man mit select ja auch, einfach nur nicht häufiger als nötig.



  • einfach nur lol schrieb:

    Sei doch einfach leise wenn du keine Ahnung hast. 🙄

    Verzieh dich, unwerteres Lebewesen.



  • @314159265358979
    Asynchron und non-blocking sind nicht das selbe.

    Non-Blocking heisst nur, dass man so arbeiten kann, dass nie ein Befehl (unerwünschterweise) blockiert.

    Die Operationen (accept/recv/send/...) erfolgen aber immer noch "unmittelbar" (d.h. es ist alles nach dem Aufruf von accept/recv/send/... abgeschlossen), oder eben gar nicht (EWOULDBLOCK). Man braucht daher z.B. auch keine Puffer, die länger als ein recv/send/... Aufruf gültig sind (d.h. man kann z.B. auch mit Stack-Puffern arbeiten).

    Asynchron dagegen bedeutet, dass man mit dem Funktionsaufruf (wie auch immer der dann heisst) nur sagt: fang jetzt an mit accept/recv/send/..., und sag mir wenn du fertig bist. D.h. man muss Puffer an das IO System übergeben, und garantieren dass diese so lange gültig bleiben, bis das IO System den Aufruf abgeschlossen hat.

    Wichtiger Unterschied.

    Was das Abbrechen angeht: das ist mit non-blocking IO am allereinfachsten, da man keine asynchronen Aufrufe canceln muss.



  • Jetzt regt er sich wahrscheinlich auf, weil du ihn belehrt hast. 😉



  • Nein, nur über Vollspastis wie dich. Und nun verkriech wieder in das Loch, aus dem du hergekommen bist.



  • nur kurz braucht man async pro client ein socket?



  • alterbro schrieb:

    nur kurz braucht man async pro client ein socket?

    Ja. Bei einer Verbindung sind immer 2 Sockets miteinander verbunden.
    Du könntest mal etwas mit den rohen Berkley Sockets basteln bevor du Asio benutzt.



  • ok seh mal rein,danke



  • 314159265358979 schrieb:

    einfach nur lol schrieb:

    Sei doch einfach leise wenn du keine Ahnung hast. 🙄

    Verzieh dich, unwerteres Lebewesen.

    ACHTUNG!


Anmelden zum Antworten