Cette fois, j'ai l'opportunité d'utiliser de nouvelles API d'événement telles que libevent et libev, je vais donc les résumer. Si vous approfondissez le sujet, vous pouvez voir cela se produira, donc juste une brève introduction.
Après cela, s'il est écrit comme ** FD, veuillez le considérer comme un descripteur de fichier **.
C'est une image de conversation entre threads, processus, etc. En fonction de l'élément, la surveillance des événements et la notification elle-même sont encapsulées de sorte que l'utilisateur n'en soit pas conscient. Par exemple ...
Cela peut être naturel pour les langages haut de gamme, mais je pense que l'événement FD, qui a OSS prêt et vous permet de régler vous-même, est une fonction unique au langage C.
Il y a plusieurs. Étant donné que les émetteurs d'événements de FD sont importants, la surveillance des événements, qui sera introduite ultérieurement, est-elle substantielle, ou vice versa? Si vous êtes intéressé, il peut être intéressant de consulter l'historique.
API | Aperçu | Remarques |
---|---|---|
open | /dev/console(Sortiestandard)Quelquechoseétaitouvertetéchangé.Certainement. | N'effectuezpasd'opérationssurlesfichiersdepériphériquequinedevraientêtreeffectuéesquesurdesfichiersnormaux |
socket | API que vous apprendrez d'abord dans le traitement de la communication. Il existe diverses options liées à l'envoi et à la réception avec setsockopt, donc c'est profond(Ne regarde pas | Ces options sont utilisées de différentes manières dans OSS, vous découvrirez donc quelque chose d'inattendu lorsque vous regarderez le code OSS. |
socketpair | Recommandé lorsque vous souhaitez utiliser le socket rapidement. Vous pouvez communiquer avec une API. | Bien que la communication bidirectionnelle soit possible, il est difficile d'utiliser deux FD |
eventfd | UneAPIjustepourlesnotifications.Typedecompteur,envoyerlenuméroàl'envoi(S'ilvaut0,FDnerépondpas), Le côté lecture peut lire le compteur. | Un FD suffit, donc s'il s'agit d'un seul moyen, il vaut peut-être mieux le concevoir |
timerfd | API transcendantale pratique qui émet un événement après une certaine période de temps | Si vous avez un environnement sans timerfd, vous devriez créer le vôtre, je l'aime au niveau. |
signalfd | CréezunFDpourcapterlesignal.Ilestpratiquedepouvoircapterdessignauxenveilleprincipale. | Définitiondusignal,Notezquelesgestionnairesdesignauxsontcontraints.Référencedesignalfd |
mq_open | Processus ouvert pour le fichier de file d'attente de messages | read/l'écriture se fait également avec une API dédiée. |
pipe | API pour créer FD qui peut être utilisée pour la communication inter-processus fourchue | C'est une communication unidirectionnelle au lieu d'être disponible dans fork. |
API | Aperçu |
---|---|
read,revc, etc | Lecture des descripteurs de fichiers de base |
mq_revc | API qui peut être reçue via le fichier de file d'attente de messages. |
Si vous le recevez simplement, ce sera 1 API par 1FD, ce qui est inefficace. Par conséquent, il est pratique d'avoir une fonction pour surveiller les FD collectivement. Cette fonction est importante.
API | Aperçu | Impression personnelle |
---|---|---|
select, pselect | Bonne vieille API classique,Aussi compatible avec Windows | Il vaut mieux utiliser FD clairement. FD à chaque fois_Il est gênant de devoir vérifier avec une API telle que ISSET |
epoll | Une version améliorée de select qui élimine les tracas de la réinitialisation constante du FD | EPOLL_CTL_Si vous faites ADD, FD sera ajouté à la veille sans autorisation, donc c'est facile. En tant que passe-temps personnel, sélectionner est le meilleur |
libevent | OSSquiencapsulel'APIdesurveillancedesévénementsci-dessusetlarendsimpleàutiliser | Leformatderappelestfacileàutiliser.Cependant,ilauneimpressiondélicateprobablementparcequ'iln'estpasthread-safe.Unbrefarticledesynthèse |
libev | Versioncompatiblehautevitesseci-dessus.RéférenceAPI..LedocumentestLISEZ-MOI⇒ici。 Veuillezvousréférerd'abordà«QUELIREENCASDEDÉPART»et«FONCTIONSDECONTRÔLEDESBOUCLESD'ÉVÉNEMENT»pourplusdedétails. Lesdocumentssontégalementimportants.S'iln'yapasdeproblèmeaveclaGPL,ilsemblebondelesélectionner. |
Evpouruneutilisationmulti-thread_default_loop(0)Pas ev_loop_new, ev_loop, ev_Utilisez unloop. |
Je pense qu'il y a plusieurs exemples ci-dessus, mais il est recommandé de regarder fdevent_XXX.c de lighttpd. Tout est organisé. Étant donné que le code OSS est destiné à la prise en charge de plusieurs environnements, plusieurs processus sont écrits, de sorte que vous pouvez voir l'implémentation garantie de chaque fonction.
API | Aperçu |
---|---|
write,send | Écriture de descripteurs de fichiers de base |
mq_send | API qui peut être envoyée via le fichier de file d'attente de messages |
À l'exception de mq, l'écriture peut être utilisée pour d'autres FD. De plus, timerfd est l'émission FD et événement.
Post-scriptum 2018/06/19 Ce n'est pas FD, mais il y a aussi pthread_cond. Puisqu'il est utilisé en combinaison avec mutex, il peut être bon quand il est déjà exclusif avec mutex.
Historique des E / S multiples https://itkq.jp/blog/2017/05/10/linux-file-and-io/ Chaque lien
Recommended Posts