Crunchez vos adresses URL
|
Rejoignez notre discord
|
Hébergez vos photos
Page 39 sur 182 PremièrePremière ... 2931323334353637383940414243444546474989139 ... DernièreDernière
Affichage des résultats 1 141 à 1 170 sur 5455
  1. #1141
    Petite question Webservices .Net 4.5 et traitement asynchrones :
    Je n'arrive pas à comprendre si ce que je veux faire est possible "proprement" ou pas :

    J'ai créé un webservice qui doit utiliser un objet qui a des traitements asynchrones (objet dans une bibliothèque .Net 4.5 dont je n'ai pas la source). Quand j'essaie d'appeler une méthode asynchrone, il me plante en me disant qu'un WS/.Net Pool peut pas appeler un traitement async chépakoi. En gros ça donne : Ma page de webservice (asmx) qui va instancier un objet que j'ai créé, objet qui fait appel à un autre objet avec ces méthodes asynchrones. Ça me parait étonnant qu'on ne puisse pas faire ça, non ?

  2. #1142
    Citation Envoyé par vectra Voir le message
    Je me souviens avoir évité de cocher la case 'delete branch trucmuche'.
    Mais là, c'est encore une autre option?

    Pourtant, sous Bitbucket, quand j'affiche les commits, ils sont bien tous là...
    Auto-réponse à moi-même: c'était probablement un add-on.
    J'en ai trouvé un qu'il est correct, et surtout qu'il est gratos:
    https://marketplace.atlassian.com/ap...r&tab=overview

    A voir si je peux décrocher une licence académique: en version serveur, ça fait descendre la plupart des licenses (server-10 users) plugin à 5$ au lieu de 10. Mais j'ai vu des licenses à 100$ pour certains modules les plus chiadés

    Par contre, autant c'est bien clairement foutu cette suite Atlassian, autant ça rame sa mère. Ces gens plaident pour l'hexacore, à n'en pas douter... Merci java, hein

    - - - Mise à jour - - -

    Citation Envoyé par deathdigger Voir le message
    Petite question Webservices .Net 4.5 et traitement asynchrones :
    La vache, c'est clair que je bosserai jamais sur ce genre d'applicatifs. J'en suis resté aux scripts CGI et aux feuilles de style css: j'ai l'impression qu'il y a eu deux ou trois petites évolutions entretemps

  3. #1143
    Citation Envoyé par deathdigger Voir le message
    Petite question Webservices .Net 4.5 et traitement asynchrones :
    Je n'arrive pas à comprendre si ce que je veux faire est possible "proprement" ou pas :

    J'ai créé un webservice qui doit utiliser un objet qui a des traitements asynchrones (objet dans une bibliothèque .Net 4.5 dont je n'ai pas la source). Quand j'essaie d'appeler une méthode asynchrone, il me plante en me disant qu'un WS/.Net Pool peut pas appeler un traitement async chépakoi. En gros ça donne : Ma page de webservice (asmx) qui va instancier un objet que j'ai créé, objet qui fait appel à un autre objet avec ces méthodes asynchrones. Ça me parait étonnant qu'on ne puisse pas faire ça, non ?
    Je ne comprend pas très bien le problème.
    Tu as essayé de faire ce qui est décrit dans ce fil StackOverflow ?

  4. #1144
    Citation Envoyé par deathdigger Voir le message
    Petite question Webservices .Net 4.5 et traitement asynchrones :
    Je n'arrive pas à comprendre si ce que je veux faire est possible "proprement" ou pas :

    J'ai créé un webservice qui doit utiliser un objet qui a des traitements asynchrones (objet dans une bibliothèque .Net 4.5 dont je n'ai pas la source). Quand j'essaie d'appeler une méthode asynchrone, il me plante en me disant qu'un WS/.Net Pool peut pas appeler un traitement async chépakoi. En gros ça donne : Ma page de webservice (asmx) qui va instancier un objet que j'ai créé, objet qui fait appel à un autre objet avec ces méthodes asynchrones. Ça me parait étonnant qu'on ne puisse pas faire ça, non ?
    Tu peux montrer comment tu code ça ? Tu fait bien des appels du style ?

    Code:
    public async Task<TypeRetour> MonSuperEndpoint()
    {
       TypeRetour result = await _myExternalService.ProcessAsync();
       return result;
    }
    Ps: il est très important de ne pas se substituer au système d'asynchronisme dans ASP.NET d'ailleurs : sinon les threads s’emmêlent et ça bloque (donc pas de t.Wait(), t.Result, etc), tu retourne le truc asynchrone et c'est le framework qui s'en occupe pour toi.

  5. #1145
    Je vais tester ça demain, merci

    Citation Envoyé par Gillete Voir le message
    Je ne comprend pas très bien le problème.
    Tu as essayé de faire ce qui est décrit dans ce fil StackOverflow ?
    Ce n'est pas le client qui merde

  6. #1146
    Wabon, ce n’est pas l’interface chaise-clavier qui merde ?
    une balle, un imp (Newstuff #491, Edge, Duke it out in Doom, John Romero, DoomeD again)
    Canard zizique : q 4, c, d, c, g, n , t-s, l, d, s, r, t, d, s, c, jv, c, g, b, p, b, m, c, 8 b, a, a-g, b, BOF, BOJV, c, c, c, c, e, e 80, e b, é, e, f, f, f, h r, i, J, j, m-u, m, m s, n, o, p, p-r, p, r, r r, r, r p, s, s d, t, t
    Canard lecture

  7. #1147
    Citation Envoyé par deathdigger Voir le message
    Ce n'est pas le client qui merde
    C'est bien connu: le client a toujours raison :pouêt:

  8. #1148
    Citation Envoyé par Dross Voir le message
    Tu peux montrer comment tu code ça ? Tu fait bien des appels du style ?

    Code:
    public async Task<TypeRetour> MonSuperEndpoint()
    {
       TypeRetour result = await _myExternalService.ProcessAsync();
       return result;
    }
    Ps: il est très important de ne pas se substituer au système d'asynchronisme dans ASP.NET d'ailleurs : sinon les threads s’emmêlent et ça bloque (donc pas de t.Wait(), t.Result, etc), tu retourne le truc asynchrone et c'est le framework qui s'en occupe pour toi.
    Bon du coup, c'est plus compliqué que ça : J'appelle un objet ayant une méthode statique asynchrone, du coup, je ne peux l'attendre. Voici en simplifié mon code :
    Mon webservice :


    Ma méthode avec en rouge l'appel à la méthode asynchrone :


    Et le OnGetResult :


    (C'est un peu foireux parce que j'ai essayé plein de trucs)
    Dans cette version, j'ai l'erreur
    Impossible de démarrer une opération asynchrone pour le moment. Les opérations asynchrones peuvent être démarrées uniquement depuis un gestionnaire ou un module asynchrone, ou lors de certains événements du cycle de vie de la page. Si cette exception a été levée durant l'exécution d'une page, vérifiez que celle-ci est marquée de la façon suivante : <%@ Page Async="true" %>. Cette exception peut aussi indiquer une tentative d'appeler une méthode « async void », qui n'est pas généralement pris en charge au sein de traitement d'une demande ASP.NET. À la place, la méthode asynchrone doit retourner une tâche, et l'appelant doit l'attendre.
    En mettant mon bool en async Task, ça ne plante pas, mais il n'attend pas l'appel de la méthode asynchrone dont je n'ai pas les sources.

  9. #1149
    A moins que ça soit une limitation du webservice (asmx) (je bosse/ai bossé avec WCF, ASP.NET MVC/API/Core, mais jamais plus ancien), ça devrai marcher si tu répercute l'asynchronisme partout :

    Code:
    public async Task<string> TestAPI()
    ...
    bool z = await mvx.TAB010_GetTable()
    ...
    public async Task<bool> TAB010_GetTable()
    ...
    await MIWorker.Run()
    Si ça marche pas, teste donc en synchrone :

    Code:
    MIWorker.Run().Wait();

  10. #1150
    Citation Envoyé par Dross Voir le message
    A moins que ça soit une limitation du webservice (asmx) (je bosse/ai bossé avec WCF, ASP.NET MVC/API/Core, mais jamais plus ancien), ça devrai marcher si tu répercute l'asynchronisme partout :

    Code:
    public async Task<string> TestAPI()
    ...
    bool z = await mvx.TAB010_GetTable()
    ...
    public async Task<bool> TAB010_GetTable()
    ...
    await MIWorker.Run()
    Si ça marche pas, teste donc en synchrone :

    Code:
    MIWorker.Run().Wait();
    J'ai à peu près réussi à faire ce que je voulais grâce à toi, merci

  11. #1151
    Certains d'entre vous ont une petite expérience d'administration d'Atlassian?
    Je voulais savoir si je pouvais gagner significativement en vitesse en installant un SGBD dédié (comme postgresql) plutôt que d'utiliser le moteur interne fourni dans le système?

  12. #1152
    Salut !
    J'ai aussi une question (pour les X86 ADV) ;-)

    Existe t-il un moyen pour exposer la pile entre plusieurs processus (donc pas de mmap) ? Il me semble que non mais ça a éveillé ma curiosité. Du coup, je me demande s'il existe des cas (OS, archi, hack, etc.) qui permettent d'accéder à un espace mémoire alloué (new / malloc) par un autre processus.

    Il me semble que sous windows en 16bits, c'était le cas avec les GlobalAlloc, mais j'ai peu être mal compris...

  13. #1153
    Sous Linux, avec ptrace tu peux faire ça, c'est ce que fait un débogueur.

    Après tu peux aussi faire de la shared memory, et mettre la stack de tes threads dessus.
    "Dieu est mort" · "Si le téléchargement c’est du vol, Linux c’est de la prostitution."

  14. #1154
    Nous en cours on nous a présenté les shm de POSIX comme étant un outil pour partager de la mémoire entre processus. Cela ne correspondrait pas à ce que tu recherches ?

  15. #1155
    ptrace c'est pas le mieux pour lire beaucoup de mémoire: tu n'y a accès que mot par mot. Il y a des interfaces spéciales plus pratiques pour lire la mémoire d'autres processus : process_vm_readv (linux >= 3.2), ReadProcessMemory (windows >= xp), vm_read/vm_read_overwrite (mach/osx). Ça reste plutôt orienté débogueur, je ne sais pas si c'est ce que tu veux.

    PS: new/malloc c'est pas dans la pile.

  16. #1156
    Suite à un déménagement de bureaux avec passage en open space je me retrouve à côté d'une équipe de jeunes consultants pour la partie front d'un projet très différents des miens: des trucs à la mode, de l'angular des micro-services et tout le toutim. Ils ont l'air d'avoir pas mal de latitudes sur les choix technologiques, mais par contre ils ont l'air de galérer lors des releases en prod. Aujourd'hui un des responsables passent dans leur coin et demande une petite présentation de l'avancement des travaux.

    Un dev commence à lui parler de manière très enthousiaste de tout un tas de truc sur la stack de gestion des micro-services (un truc répondant au doux nom de Zuul). Et au bout de 5mn il y a un gros blanc.
    Et l'interne commence à demander combien il y en a de micro-services et à quoi ils servent, parce que dans ses souvenirs la version d'avant c'était un petit truc facile à maintenir et déployer.

    C'est là que je me suis bien marré, quand après avoir annoncé qu'il n'y avait que deux services, dont un qui renvoyait une string (fonction de lookup), il a essayé de convaincre le responsable du bien fondé de la démarche, que les micro-services sont plus simple à maintenir avec tout un tas d'argument fallacieux.
    La discussion a failli tourner au pugilat

  17. #1157

  18. #1158
    Voilà, les microservices c'est pas magique.

    Et ce que tu gagnes en découplage, facilité de maintenance et de déploiement, tu le payes en complexité de ton infra.
    Donc ce n'est pas adapté dans tous les cas.

    (mais Zuul ce n'est pas une stack de gestion de microservices, c'est juste une gateway)
    - La version 3 est arrivée !

  19. #1159
    Je sais pas trop ce que c'est en vrai, j'ai juste entendu le mec balancer une série de noms étranges pour moi, avec dedans Zuul et Netflix...
    Mais il y a avait un petit côté "fossé des générations" dans leur discussion

  20. #1160

  21. #1161
    Merci pour vos réponse.

    En vrai, j'ai deux cas :

    1 - J'ai une adresse virtuelle qui pointe vers le registre d'un FPGA sur le PCI que je récupère depuis un process et que je souhaiterai utiliser avec un autre process.

    À la base, comme j'utilisais les fonctions IPC de cuda qui permet de partager n'importe quel segment de mémoire sur le GPU entre des processus (merci l'UVA).

    Du coup : 2- J'en suis venu à me demander si il y avais un équivalant coté RAM du genre :
    Code:
    /* process 1 */
    ptr = new Data[N];
    handle = getIPCHandle(ptr, N);
    Code:
    /* process 2 */
    ptr = openIPCHandle(handle);
    Le point 1 : je me demande si je peux pas récupérer l'adresse physique (on sais faire) puis la mapper de nouveau et récupérer une adresse virtuelle sur le process 2.
    Le point 2 est plus hypothétique. C'est plus par amour de la symétrie (host <-> device) que par réelle contrainte

  22. #1162
    Si j'ai bien compris, c'est juste de la mémoire partagée que tu veux. "ptr" n'as pas besoin d'avoir la même valeur dans les deux processus (pas le même espace d'adresses) ? juste de pointer vers le même bloc de mémoire physique ?

  23. #1163

  24. #1164
    Ah tu pensais à regarder le mécanisme de shm de POSIX, ça ma l'air de vraiment correspondre à ce que tu veut

  25. #1165
    Citation Envoyé par Raplonu Voir le message
    Le point 1 : je me demande si je peux pas récupérer l'adresse physique (on sais faire) puis la mapper de nouveau et récupérer une adresse virtuelle sur le process 2.
    Oui, c'est l'idée. Bien sur c'est généralement strictly verboten de récupérer l'adresse physique, mais une API bien foutue peut te donner un handle dessus, comme le fait CUDA.
    Tu utilises quel API et driver pour mapper les registres du FPGA en mémoire virtuelle ? Normalement c'est le boulot du driver de faire ça, et il n'a pas fondamentalement de raison de t'empêcher de mapper le même registre dans la mêmoire virtuelle de 2 process différents. (Bien sûr, il peut tout de même refuser de le faire parce que le développeur a jugé que c'était beaucoup trop casse-gueule.)

  26. #1166
    Pour les registres FPGA, on utilise une solution propriétaire : Quickplay (Oui, c'est le bon lien, c'est encore en alpha). Le truc chiant c'est que le contexte vérouille l'accés au FPGA, du coup, pas moyen d'y accéder depuis un autre contexte... C'est totalement compréhensible d'un point de vue casse-gueulitude de ne pas vouloir contrôler le FPGA de façon concourante. Par contre, c'est dommage de ne pas permettre ces accès là.

    C'est pour ça que je cherche un moyen de passer ce pointeur d'un process à l'autre. Sinon, faut que je vois avec les ingé de Quickplay, il y a peu être moyen via des fonctions plus bas niveau qui ne vérifie pas si c'est verrouillé.

    Citation Envoyé par gbip Voir le message
    Ah tu pensais à regarder le mécanisme de shm de POSIX, ça ma l'air de vraiment correspondre à ce que tu veut
    Pas vraiment du coup, j'ai déjà un espace mémoire dont je veux donner l’accès à un autre process. La shm créée un nouvel espace mémoire du coup. Non ?

    C'est fou, depuis que je suis confronté à ça, je m'aperçois que j'y connais rien en mémoire

  27. #1167
    Ben au lieu de new Data[N], tu peux faire ton new dans un espace préalloué qui est partagé avec d'autres processes.

    En gros, sous Linux, un truc du genre :
    Code:
    int fd = open("/dev/shm/my-memory", O_RDWR);
    assert(fd >= 0);
    
    size_t length = sizeof(Data) * N;
    int err = ftruncate(fd, length);
    assert(err == 0);
    
    void *mem = mmap(NULL, length, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
    assert(mem != MAP_FAILED);
    
    Data* ptr = new (mem) Data[N];
    handle = getIPCHandle(ptr, N);
    Et pour lire la mémoire depuis un autre process:
    Code:
    int fd = open("/dev/shm/my-memory", O_RDONLY);
    assert(fd >= 0);
    
    size_t length = sizeof(Data) * N;
    void *mem = mmap(NULL, length, PROT_READ, MAP_SHARED, fd, 0);
    assert(mem != MAP_FAILED);
    
    // Ici on peut lire depuis mem, les données écrites par l'autre process
    Ca marche aussi probablement avec n'importe quel fichier, même en dehors de /dev/shm, mais /dev/shm est normalement garanti d'être un filesystem virtuel en RAM, donc pas de flush disque.

    Ca peut se faire aussi plus simplement avec un mapping anonyme si l'autre process est forké directement, en partageant le file descriptor plutôt que d'avoir à réouvrir le fichier.

    - - - Mise à jour - - -

    (J'ai fait ça de tête, pas sûr que ça marche direct, mais l'idée est là)
    "Dieu est mort" · "Si le téléchargement c’est du vol, Linux c’est de la prostitution."

  28. #1168
    Citation Envoyé par rOut Voir le message
    Ca marche aussi probablement avec n'importe quel fichier, même en dehors de /dev/shm, mais /dev/shm est normalement garanti d'être un filesystem virtuel en RAM, donc pas de flush disque.
    C'est ce qu'on utilise actuellement. La question portait sur le fait de partager une mémoire à postériori : allocation, puis la rendre visible en shm. Ce qui me semble ne pas être possible...

  29. #1169
    Citation Envoyé par Raplonu Voir le message
    C'est ce qu'on utilise actuellement. La question portait sur le fait de partager une mémoire à postériori : allocation, puis la rendre visible en shm. Ce qui me semble ne pas être possible...
    Sinon tu codes un serveurqui accède à ton FPGA et qui gère la concurrence et tu fais des IPC dedans de tes autres clients.
    Sleeping all day, sitting up all night
    Poncing fags that's all right
    We're on the dole and we're proud of it
    We're ready for 5 More Years

  30. #1170
    C'est ce qu'on fait. L'idée c'est d'isoler au mieux le contexte du fpga afin de pas mettre la machine en vrac quand ça plante. Mais comme on fait aussi du temps réel faible latence, on a besoin de donner les accès directs aux différents registres de contrôle.

    Bon, j'arrête de polluer le thread avec cette problématique ultra spécifique. J'aurai du probablement commencer par mieux présenter mon problème.

    Je reviendrai faire un point quand j'aurai une solution (ioctl ?)

    Merci à vous !

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •