OVH Cloud OVH Cloud

Delegate ou thread

12 réponses
Avatar
oizo
Bonjour,

Je dois lancer plusieurs tâches longues en paralléle à partir de mon
site web, actuellement j'utilise le delegate mais il ne peu y avoir un
seul delegate simultané par site (?), l'avantage est que j'arrive a
dialoguer avec ( passage de parametres, demande de l'avancement du
traitement, detection de la fin du traitement, récupération des
paramétres retours).

Pensez vous qu'il est possible de faire la même chose avec des threads
?? et donc de lancer plusieurs threads en parallèle ?
que me conseillez vous ?


Merci

10 réponses

1 2
Avatar
Faure-vincent Pascal
Ben moi je ne vois pas pourquoi tu utilise des delegate pour faire des
taches en parallèle.
seul les thread le permet
pascal



"oizo" a écrit dans le message de news:
%
Bonjour,

Je dois lancer plusieurs tâches longues en paralléle à partir de mon site
web, actuellement j'utilise le delegate mais il ne peu y avoir un seul
delegate simultané par site (?), l'avantage est que j'arrive a dialoguer
avec ( passage de parametres, demande de l'avancement du traitement,
detection de la fin du traitement, récupération des paramétres retours).

Pensez vous qu'il est possible de faire la même chose avec des threads ??
et donc de lancer plusieurs threads en parallèle ?
que me conseillez vous ?


Merci


Avatar
Patrick Philippot
Bonjour,

Les notions de thread et de delegate ne sont pas liées. Un delegate est
simplement le nom .Net pour ce qu'on appelle habituellement un smart
pointer, un objet encapsulant ce que l'on appelle en C/C++ un pointeur de
fonction. Il permet d'appeler, de manière sécurisée, une méthode au travers
d'une variable contenant son adresse. C'est pour cela qu'il est utilisé pour
gérer les événements en particulier.

Un thread est l'unité de dispatching du système et permet d'avoir dans un
même exécutable plusieurs tâches s'exécutant de manière concurrente,
plusieurs fils d'exécution en parallèle (réellement en parallèle uniquement
s'il y a plusieurs processeurs dans la machine).

--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr


"oizo" wrote in message
news:%
Bonjour,

Je dois lancer plusieurs tâches longues en paralléle à partir de mon site
web, actuellement j'utilise le delegate mais il ne peu y avoir un seul
delegate simultané par site (?), l'avantage est que j'arrive a dialoguer
avec ( passage de parametres, demande de l'avancement du traitement,
detection de la fin du traitement, récupération des paramétres retours).

Pensez vous qu'il est possible de faire la même chose avec des threads ??
et donc de lancer plusieurs threads en parallèle ?
que me conseillez vous ?


Merci


Avatar
Faure-vincent Pascal
voila bien dit lol
"Patrick Philippot" a écrit dans le
message de news:
Bonjour,

Les notions de thread et de delegate ne sont pas liées. Un delegate est
simplement le nom .Net pour ce qu'on appelle habituellement un smart
pointer, un objet encapsulant ce que l'on appelle en C/C++ un pointeur de
fonction. Il permet d'appeler, de manière sécurisée, une méthode au
travers d'une variable contenant son adresse. C'est pour cela qu'il est
utilisé pour gérer les événements en particulier.

Un thread est l'unité de dispatching du système et permet d'avoir dans un
même exécutable plusieurs tâches s'exécutant de manière concurrente,
plusieurs fils d'exécution en parallèle (réellement en parallèle
uniquement s'il y a plusieurs processeurs dans la machine).

--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr


"oizo" wrote in message
news:%
Bonjour,

Je dois lancer plusieurs tâches longues en paralléle à partir de mon site
web, actuellement j'utilise le delegate mais il ne peu y avoir un seul
delegate simultané par site (?), l'avantage est que j'arrive a dialoguer
avec ( passage de parametres, demande de l'avancement du traitement,
detection de la fin du traitement, récupération des paramétres retours).

Pensez vous qu'il est possible de faire la même chose avec des threads ??
et donc de lancer plusieurs threads en parallèle ?
que me conseillez vous ?


Merci






Avatar
oizo
Patrick Philippot a écrit :
Bonjour,

Les notions de thread et de delegate ne sont pas liées. Un delegate est
simplement le nom .Net pour ce qu'on appelle habituellement un smart
pointer, un objet encapsulant ce que l'on appelle en C/C++ un pointeur de
fonction. Il permet d'appeler, de manière sécurisée, une méthode au travers
d'une variable contenant son adresse. C'est pour cela qu'il est utilisé pour
gérer les événements en particulier.

Un thread est l'unité de dispatching du système et permet d'avoir dans un
même exécutable plusieurs tâches s'exécutant de manière concurrente,
plusieurs fils d'exécution en parallèle (réellement en parallèle uniquement
s'il y a plusieurs processeurs dans la machine).



Si je comprend un peu, pour lancer des traitements "en paralléle" c'est
le thread ok,
mais alors comment dialoguer entre le thread principal et les autres
threads ? ( via les delegates ? )
Avatar
oizo
Patrick Philippot a écrit :
Bonjour,

Les notions de thread et de delegate ne sont pas liées. Un delegate est
simplement le nom .Net pour ce qu'on appelle habituellement un smart
pointer, un objet encapsulant ce que l'on appelle en C/C++ un pointeur de
fonction. Il permet d'appeler, de manière sécurisée, une méthode au travers
d'une variable contenant son adresse. C'est pour cela qu'il est utilisé pour
gérer les événements en particulier.

Un thread est l'unité de dispatching du système et permet d'avoir dans un
même exécutable plusieurs tâches s'exécutant de manière concurrente,
plusieurs fils d'exécution en parallèle (réellement en parallèle uniquement
s'il y a plusieurs processeurs dans la machine).



Dans beaucoup d'article sur je trouve que pour ne pas bloquer le site
lors d'opération longue, il faut lancer une opération asynchrose sur le
serveur (ex : http://www.c2i.fr/code.aspx?IDCodeT4)) et qu'il faut
utiliser les délégates pour cela.
???
Avatar
Faure-vincent Pascal
cad dialogué ?


"oizo" a écrit dans le message de news:

Patrick Philippot a écrit :
Bonjour,

Les notions de thread et de delegate ne sont pas liées. Un delegate est
simplement le nom .Net pour ce qu'on appelle habituellement un smart
pointer, un objet encapsulant ce que l'on appelle en C/C++ un pointeur de
fonction. Il permet d'appeler, de manière sécurisée, une méthode au
travers d'une variable contenant son adresse. C'est pour cela qu'il est
utilisé pour gérer les événements en particulier.

Un thread est l'unité de dispatching du système et permet d'avoir dans un
même exécutable plusieurs tâches s'exécutant de manière concurrente,
plusieurs fils d'exécution en parallèle (réellement en parallèle
uniquement s'il y a plusieurs processeurs dans la machine).



Si je comprend un peu, pour lancer des traitements "en paralléle" c'est le
thread ok,
mais alors comment dialoguer entre le thread principal et les autres
threads ? ( via les delegates ? )


Avatar
oizo
par exemple remonté dans l'ihm l'état du traitement, l'avancement... si
il y a une erreur...


Faure-vincent Pascal a écrit :
cad dialogué ?


"oizo" a écrit dans le message de news:

Patrick Philippot a écrit :
Bonjour,

Les notions de thread et de delegate ne sont pas liées. Un delegate est
simplement le nom .Net pour ce qu'on appelle habituellement un smart
pointer, un objet encapsulant ce que l'on appelle en C/C++ un pointeur de
fonction. Il permet d'appeler, de manière sécurisée, une méthode au
travers d'une variable contenant son adresse. C'est pour cela qu'il est
utilisé pour gérer les événements en particulier.

Un thread est l'unité de dispatching du système et permet d'avoir dans un
même exécutable plusieurs tâches s'exécutant de manière concurrente,
plusieurs fils d'exécution en parallèle (réellement en parallèle
uniquement s'il y a plusieurs processeurs dans la machine).



Si je comprend un peu, pour lancer des traitements "en paralléle" c'est le
thread ok,
mais alors comment dialoguer entre le thread principal et les autres
threads ? ( via les delegates ? )






Avatar
Patrice
C'est un peu un abus de langage. Même si ils sont éventuellement utiles dans
ce cadre, ce ne sont pas les delegates en tant que tels qui fournissent
cette possibilité mais le fait de faire les appels de manière asynchrone. La
notion importante est l'appel asynchrone, pas vraiment le delegate qui peut
également être utilisée dans un contexte n'ayant rien à voir avec des appels
asynchrones.

--
Patrice

"oizo" a écrit dans le message de news:

Patrick Philippot a écrit :
Bonjour,

Les notions de thread et de delegate ne sont pas liées. Un delegate est
simplement le nom .Net pour ce qu'on appelle habituellement un smart
pointer, un objet encapsulant ce que l'on appelle en C/C++ un pointeur de
fonction. Il permet d'appeler, de manière sécurisée, une méthode au
travers d'une variable contenant son adresse. C'est pour cela qu'il est
utilisé pour gérer les événements en particulier.

Un thread est l'unité de dispatching du système et permet d'avoir dans un
même exécutable plusieurs tâches s'exécutant de manière concurrente,
plusieurs fils d'exécution en parallèle (réellement en parallèle
uniquement s'il y a plusieurs processeurs dans la machine).



Dans beaucoup d'article sur je trouve que pour ne pas bloquer le site lors
d'opération longue, il faut lancer une opération asynchrose sur le serveur
(ex : http://www.c2i.fr/code.aspx?IDCodeT4)) et qu'il faut utiliser les
délégates pour cela.
???


Avatar
Patrick Philippot
> mais alors comment dialoguer entre le thread principal et les autres
threads ? ( via les delegates ? )



Tous les threads d'un même processus accèdent aux mêmes ressources. Il n'y a
donc aucun problème de dialogue, toutes les données du processus sont
partagées par tous les threads. Le problème, a contrario, n'est pas de
discuter entre threads mais de synchroniser l'accès aux ressources partagées
au moyen des objets de synchro habituels (mutexes, events,...) afin d'éviter
d'écrire dans un tableau, par exemple, alors qu'un autre thread est en train
d'écrire dedans. C'est la partie la plus complexe de la programmation des
threads. Créer et démarrer un thread, c'est trivial. Synchroniser proprement
tous les threads d'un processus demande une bonne analyse et un zeste
d'expérience. Et plus les threads sont nombreux, plus c'est compliqué.

Pour faire dialoguer des threads appartenant à des processus différents, on
utilise les mécanismes d'IPC habituels. Rien de nouveau.

par exemple remonté dans l'ihm l'état du traitement
, l'avancement... si il y a une erreur...



Vous parlez de remontées d'infos vers l'IHM: nous sommes dans un forum dédié
à ASP .Net et donc aux applis Web. Je ne vois pas très bien où vous voulez
en venir...

--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr
Avatar
Arnaud CLERET
Bonsoir,

Chacun des threads a accès à l'ensemble des ressources d'un même processus
et la problmématique vient plus de la synchronisation des ressources comme
l'a expliqué Patrick. Sinon on passera par Remoting ou WCF pour faire des
échanges inter-process.

Pour connaitre l'état d'avancement des threads en cours de travail vous
pouvez vous baser sur un mécanisme d'évènements lancer par les threads fils
et capturés par le thread principal afin d'afficher les états au niveau de
l'ihm.

--
arno - http://www.dotnetguru2.org/acleret/

"oizo" a écrit dans le message de news:

par exemple remonté dans l'ihm l'état du traitement, l'avancement... si il
y a une erreur...


Faure-vincent Pascal a écrit :
cad dialogué ?


"oizo" a écrit dans le message de news:

Patrick Philippot a écrit :
Bonjour,

Les notions de thread et de delegate ne sont pas liées. Un delegate est
simplement le nom .Net pour ce qu'on appelle habituellement un smart
pointer, un objet encapsulant ce que l'on appelle en C/C++ un pointeur
de fonction. Il permet d'appeler, de manière sécurisée, une méthode au
travers d'une variable contenant son adresse. C'est pour cela qu'il est
utilisé pour gérer les événements en particulier.

Un thread est l'unité de dispatching du système et permet d'avoir dans
un même exécutable plusieurs tâches s'exécutant de manière concurrente,
plusieurs fils d'exécution en parallèle (réellement en parallèle
uniquement s'il y a plusieurs processeurs dans la machine).



Si je comprend un peu, pour lancer des traitements "en paralléle" c'est
le thread ok,
mais alors comment dialoguer entre le thread principal et les autres
threads ? ( via les delegates ? )







1 2