Dieses Mal habe ich die Möglichkeit, neue Ereignis-APIs wie libevent und libev zu verwenden, daher werde ich sie zusammenfassen. Wenn Sie sich eingehend damit befassen, können Sie sehen, dass dies wird passieren, also nur eine kurze Einführung.
Wenn es danach als ** FD geschrieben ist, stellen Sie es sich bitte als Dateideskriptor ** vor.
Es ist ein Bild des Gesprächs zwischen Threads, Prozessen usw. Je nach Element werden die Ereignisüberwachung und die Benachrichtigung selbst so verpackt, dass der Benutzer nichts davon merkt. Zum Beispiel ...
Dies mag für High-End-Sprachen natürlich sein, aber ich denke, dass das FD-Ereignis, das OSS bereit hält und es Ihnen ermöglicht, selbst zu optimieren, eine Funktion ist, die nur in der C-Sprache verfügbar ist.
Es gibt verschiedene. Ist die Ereignisüberwachung, die später eingeführt wird, erheblich oder umgekehrt, da die Ereignisemittenten von FD erheblich sind? Wenn Sie interessiert sind, kann es interessant sein, die Geschichte nachzuschlagen.
API | Überblick | Bemerkungen |
---|---|---|
open | /dev/console(Standardausgabe)Etwaswaroffenundwurdeausgetauscht.Bestimmt. | FührenSiekeineVorgängefürGerätedateienaus,dienurfürnormaleDateienausgeführtwerdensollten |
socket | API, die Sie zuerst in der Kommunikationsverarbeitung lernen. Es gibt verschiedene Optionen für das Senden und Empfangen mit setsockopt, daher ist es tiefgreifend(Schau nicht hin | Diese Optionen werden in OSS auf verschiedene Arten verwendet, sodass Sie beim Betrachten des OSS-Codes etwas Unerwartetes entdecken. |
socketpair | Empfohlen, wenn Sie die Steckdose schnell verwenden möchten. Sie können mit einer API kommunizieren. | Während bidirektionale Kommunikation möglich ist, ist es schwierig, zwei FDs zu verwenden |
eventfd | EineAPInurfürBenachrichtigungen.Zählertyp,Sende-NummerbeimSenden(Wennes0ist,antwortetFDnicht)Die Leseseite kann den Zähler lesen. | Ein FD ist genug. Wenn es also ein Weg ist, ist es möglicherweise besser, dies zu entwickeln |
timerfd | Transzendentale praktische API, die nach einer bestimmten Zeit ein Ereignis ausgibt | Wenn Sie eine Umgebung ohne Timerfd haben, sollten Sie Ihre eigene erstellen. Ich mag es auf der Ebene. |
signalfd | ErstellenSieeinenFD,umdasSignalaufzunehmen.Esistpraktisch,SignaleimHaupt-Standbyempfangenzukönnen. | Signaldefinition,BeachtenSie,dassdieSignalhandlereingeschränktsind.Referenzvonsignalfd |
mq_open | Öffnen Sie den Prozess für die Nachrichtenwarteschlangendatei | read/Das Schreiben erfolgt auch mit einer dedizierten API. |
pipe | API zum Erstellen von FD, die für die gegabelte Kommunikation zwischen Prozessen verwendet werden kann | Es ist eine unidirektionale Kommunikation, anstatt in der Gabel verfügbar zu sein. |
API | Überblick |
---|---|
read,revc, etc | Grundlegende Dateideskriptoren lesen |
mq_revc | API, die über die Nachrichtenwarteschlangendatei empfangen werden kann. |
Wenn Sie es einfach erhalten, ist es 1 API pro 1FD, was ineffizient ist. Daher ist es zweckmäßig, eine Funktion zum gemeinsamen Überwachen von FDs zu haben. Diese Funktion ist wesentlich.
API | Überblick | Persönlicher Eindruck |
---|---|---|
select, pselect | Gute alte klassische API,Auch kompatibel mit Windows | Es ist besser, FD klar zu verwenden. FD jedes Mal_Es ist mühsam, mit API wie ISSET zu überprüfen |
epoll | Eine verbesserte Version von select, die das ständige Zurücksetzen des FD überflüssig macht | EPOLL_CTL_Wenn Sie HINZUFÜGEN, wird FD ohne Erlaubnis zum Standby-Modus hinzugefügt, sodass dies ganz einfach ist. Als persönliches Hobby ist Select das Beste |
libevent | OSS,dasdieobengenannteEreignisüberwachungs-APIumschließtundderenVerwendungvereinfacht | DasRückrufformatisteinfachzubedienen.EshatjedocheinenempfindlichenEindruck,wahrscheinlichweilesnichtfadensicherist.EinkurzerzusammenfassenderArtikel |
libev | Hochgeschwindigkeits-kompatibleVersionoben.API-Referenz..DokumentistREADME⇒Hier。 WeitereInformationenfindenSiezuerstunter"WASLESEN,WENNSIEEILIGSIND"undunter"FUNKTIONEN,DIEEREIGNIS-LOOPSSTEUERN". Dokumentesindaucherheblich.WenneskeinProblemmitderGPLgibt,scheintesgut,diesauszuwählen. |
EvfürMultithread-Verwendung_default_loop(0)Nicht ev_loop_new, ev_loop, ev_Verwenden Sie Unloop. |
Ich denke, es gibt oben verschiedene Beispiele, aber es wird empfohlen, sich fdevent_XXX.c von lighttpd anzusehen. Es ist alles organisiert. Da der OSS-Code für die Unterstützung mehrerer Umgebungen vorgesehen ist, werden mehrere Prozesse geschrieben, sodass Sie die garantierte Implementierung jeder Funktion sehen können.
API | Überblick |
---|---|
write,send | Grundlegende Dateideskriptoren schreiben |
mq_send | API, die über die Nachrichtenwarteschlangendatei gesendet werden kann |
Mit Ausnahme von mq kann write für andere FDs verwendet werden. Darüber hinaus ist timerfd FD und Ereignisausgabe.
19.06.2018 Nachtrag Es ist nicht FD, aber es gibt auch pthread_cond. Da es in Kombination mit Mutex verwendet wird, kann es gut sein, wenn es bereits exklusiv für Mutex ist.
Verlauf mehrerer E / A https://itkq.jp/blog/2017/05/10/linux-file-and-io/ Jeder Link
Recommended Posts