Producteur / Consommateur et GCD

KiwixKiwix Membre
avril 2013 modifié dans API UIKit #1

Bonjour à  tous,


 


Voici le contexte résumé et simplifié au maximum :


 


- 3 étapes


a- remplir un buffer


J'ai un objet dont une méthode Start() me "crée" des buffers à  la chaà®ne et les envoie à  l'objet de traitement


b- traiter le buffer


Les buffers sont traités (tâche longue) puis passés à  un autre objet


c- l'envoyer à  un serveur


Le dernier objet envoie les buffers traités au serveur


 


- chacune de ces étapes doit être traitée par un thread différent


 


- la tâche b prend du temps


 


- je ne dois pas perdre de buffers le temps d'en traiter d'autres


 


En gros ça ressemble un peu à  du multi-thread avec un système de producteur/consommateur.


 


Dans un premier temps j'avais commencé à  mettre en place une FIFO, des sémaphores, etc. mais par soucis d'optimisation, et parce que ce serait pour moi l'occasion d'apprendre (et comprendre), j'aimerais autant que possible utiliser GCD.


 


J'ai bien lu le Fu**ing Manual mais ce que j'en ai retenu c'est que l'utilisation de GCD pour un mécanisme de producteur/consommateur rend la chose plus simple, mais aussi plus opaque. J'ai donc du mal à  saisir le principe.


 


Est-ce que quelqu'un pourrait vaider l'utilisation de GCD et m'expliquer simplement comment procéder ?


Réponses

  • Bonjour à  tous,


     


    Voici le contexte :


    - 3 étapes


    Je t'invite à  éditer ton post :D

  • AliGatorAliGator Membre, Modérateur

    [Mode moderateur] Petite question Kiwix :


     - C'est une erreur de ta part ce message fini trop tôt (genre tu as validé trop vite ton message par erreur avant de l'avoir fini)


     - Ou c'est une erreur du forum (genre tu avais rédigé ton post en entier mais quand tu as validé il t'a coupé la moitié) ?


     


    Car j'ai eu récemment un cas comme ça donc si c'est un réel souci du forum va falloir qu'on regarde ça de plus près...


  • KiwixKiwix Membre
    avril 2013 modifié #4

    [Mode moderateur] Petite question Kiwix :


     - C'est une erreur de ta part ce message fini trop tôt (genre tu as validé trop vite ton message par erreur avant de l'avoir fini)


     - Ou c'est une erreur du forum (genre tu avais rédigé ton post en entier mais quand tu as validé il t'a coupé la moitié) ?


     


    Car j'ai eu récemment un cas comme ça donc si c'est un réel souci du forum va falloir qu'on regarde ça de plus près...


     


    Salut Ali,


     


    Excusez-moi pour la fausse manip'. J'ai appuyé sur Tab pour faire une tabulation et ça a placé le focus sur le bouton de validation, du coup quand j'ai fait Entrée ça a publié..  B)


  • AliGatorAliGator Membre, Modérateur

    Salut Ali,


     


    Excusez-moi pour la fausse manip'. J'ai appuyé sur Tab pour faire une tabulation et ça a placé le focus sur le bouton de validation, du coup quand j'ai fait Entrée ça a publié..  B)


     


    Ok merci ça me rassure c'est donc pas le forum qui a bugué ;) Merci de ton retour !


    Je laisse la place aux autres pour répondre à  la question d'origine du coup, à  vous les studios !

  • YannYann Membre

    [Mode moderateur] Petite question Kiwix :


     - C'est une erreur de ta part ce message fini trop tôt (genre tu as validé trop vite ton message par erreur avant de l'avoir fini)


     - Ou c'est une erreur du forum (genre tu avais rédigé ton post en entier mais quand tu as validé il t'a coupé la moitié) ?


     


    Car j'ai eu récemment un cas comme ça donc si c'est un réel souci du forum va falloir qu'on regarde ça de plus près...


     


    J'ai eu un problème similaire avec un forum IPB, au final, il n'aimait pas quand il y avait trop de symboles " = ". J'imagine pour la sécurité et éviter les insertions de code.


    Mais il m'avait fallu un moment pour comprendre pourquoi ça ne marchait pas. ça peut être une piste pour la suite ;)

  • MalaMala Membre, Modérateur

    En gros ça ressemble un peu à  du multi-thread avec un système de producteur/consommateur.


     


    De la parallélisation de traitement par sérialisation. C'est le principe même de mon Framework Core Unit pour OS X. Je me pose la question de l'intérêt de son adaptation sous iOS maintenant que le multi-coeur commence à  se développer sur les iBidules.

  • AliGatorAliGator Membre, Modérateur

    J'avoue que j'ai pas tout lu du message d'origine, mais même si je suis gros fan et utilisateur de GCD pour ses possibilités de tâches asynchrones, avec du dispatch_async & co, je sais aussi qu'il existe des méthodes dans GCD pour faire plein d'autres choses, dont la gestion des I/O avec parallélisation des lectures/écritures.


     


    Voir dans la doc sur GCD les sections sur "Managing Dispatch Sources", "Dispatch I/O Convenience API" et "Dispatch I/O Channel API" et tout ça... mais aussi les vidéos de la WWDC'12 et WWDC'13, je me souviens qu'il y avait justement une session dédiée à  l'utilisation de GCD dans un contexte de modèle "producteur/consomateur", donc qui doit correspondre précisément à  ce que tu cherches (en tout cas la vidéo WWDC sur GCD et sur ce sujet vaut forcément le coup d'oeil)


  • WWDC'13, je me souviens ....


     


    Ali, tu vas tellement vite que tu commence à  faire des bonds dans le futur. Ralenti la cadence !  B)

  • Ali, dans ton prochain bond, n'oublie pas de noter les numéros du loto et le cours de l'action Apple !
  • AliGatorAliGator Membre, Modérateur

    Ah oui pardon c'est que je l'ai vue en avant-première quand mon pote Tim m'a montré les présentations de ses gars :D


Connectez-vous ou Inscrivez-vous pour répondre.