7
votes

Go canaux en rubis

Dans le langage de programmation GO, vous pouvez envoyer des messages à l'aide d'une construction appelée "canaux". http://golang.org/doc/effective_go.html#channels

i aimerait utiliser quelque chose comme ça dans Ruby, en particulier pour IPC.

pseudocode de ce que je veux: xxx

existe-t-il une construction, une bibliothèque ou un équivalent pour Ruby qui fonctionne comme ça?

Sinon: Quel est le meilleur moyen de construire une telle abstraction?

Mise à jour: Pour clarifier ce dont j'ai besoin de ces canaux.

Un cas d'utilisation: Certains travailleurs fourchus attendent des emplois. Ils ont tous lu à partir du même JobChannel et signalent les résultats du même résultat.

Les canaux dont j'ai besoin

  • sont très rapides,
  • écrit ne pas bloquer, (envoi de message)
  • lit le blocage, (message de réception)
  • n'a pas besoin d'un traitement spécial avant le forking,
  • léger et simple serait bien.

    jusqu'à présent, j'ai joué avec

    • draw, (opposé de légère poids léger + trop de magie pour mon petit cerveau)
    • sockets, (unixsocket, tcpsocket ... les prises de vue semblent avoir de nombreuses façons de les utiliser. J'ai eu un canal demi-travail sur UNIXSockets. Si vous pensez que les sockets ont du sens, quel sous-ensemble de fonctionnalités dois-je regarder à?)
    • Tuyaux. (Connexion de plus de 2 processus semble être non trivial)

      Si l'une de ceux-ci était déjà la technologie parfaite pour mon problème, veuillez fournir des tutoriels, etc. qui ont des informations plus ciblées sur mes exigences.


2 commentaires

Est-ce quelque chose comme des tuyaux ou une mémoire partagée? Pour quel but avez-vous besoin d'une telle chose? Le canal semble-t-il envoie des informations et la recevoir elle-même?


@Rishav Rastogi: Non, les chaînes GO sont beaucoup plus comme, bien, comme des canaux. Les canaux de Go sont basés sur les canaux de NewsQuak (sans surprise, car NewsQuak a été conçu par Rob Pike), ce qui est à son tour un hybride entre les canaux CSP (la version ultérieure, évidemment, pas l'original) et les canaux d'origine) et π-calculez. Je crois que Occam pourrait également avoir été une influence.


4 Réponses :


0
votes

Consultez cette question: Processus partagés-variables par rubis

Et aussi, consultez DRB

J'espère que cela aide un peu.


0 commentaires

1
votes

L'idée d'aller du message passant par des canaux, en tant que construction de première classe, n'a aucun sens en présence de simultanéité (gorouts, tâches que vous souhaitez les appeler). Avec une concurrence bon marché, le blocage d'un tasklet ou de la Coroutin n'est plus un problème et bloquer le passage du message commence à faire beaucoup plus de sens.

Si c'était Python, je vous pointerais à Stackless ; Dans Ruby, peut-être Revacteur ou Neverblock correspond à la facture pour vous?


2 commentaires

Merci. Tous ces concepts de concurrence sont assez nouveaux pour moi. Les acteurs pourraient résoudre ce que je cherche. Pour Ruby 1.8, je vais essayer la bibliothèque Omnibus. Github.com/mential/concurrent


Putain, les acteurs omnibus se voient comme des fils verts. Ils ont un concept de passage de message, qu'ils appellent "boîte aux lettres". Je veux exactement cette boîte aux lettres juste pour une utilisation sur plusieurs processus.



0
votes

Checkout Agent GEM, il a une syntaxe proche de ce que vous voulez: https://github.com/igrigorik/ Agent


0 commentaires

0
votes

COD est un joyau pour IPC à l'aide de canaux.


0 commentaires