Producteur / Consommateur et GCD
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
Je t'invite à éditer ton post
[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é..
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 !
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
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.
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)
Ali, tu vas tellement vite que tu commence à faire des bonds dans le futur. Ralenti la cadence !
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