Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Programación con hilos (https://www.clubdelphi.com/foros/showthread.php?t=95148)

Angel.Matilla 07-04-2021 18:27:11

Programación con hilos
 
Buenas a todos. Estoy tratando de enterarme de como funcionan los hilos (no los he usado nunca) y he estado buscando por el foro pero todo, o casi, lo que encuentro es para gente que ya conoce algo del tema. ¿Podéis facilitarme algún sitio en el que comprender como funcionan los hilos, construirlos, etc.? GRacias

movorack 07-04-2021 18:56:45

¡Hola, Angel.Matilla!

Aquí tienes dos enlaces.

ecfisa 07-04-2021 23:38:16

Hola.

Otros enlaces:
Saludos :)

mamcx 08-04-2021 04:11:07

Algunos tips que son buenos a tener en cuenta:

Usa una libreria de alto nivel en vez de programar a pelo. Hacerlo manualmente es de lo mas fácil de hacer equivocadamente, y no hay nadie que pueda decir que lo hace correcto sin ayuda mecánica: ni MS, ni Google, ni Mozilla, ni Apple ni nadie. Notaras que TODOS ESTOS crean librerías especializadas e incluso lenguajes COMPLETOS (Rust, Go) por la complejidad del tema.

"no se comunique compartiendo memoria; compartir memoria comunicándose" es la mejor manera. Usa un "canal" de comunicación y pasa datos, pero NO intentes amarrar punteros, objetos o recursos. Es idéntico a como funciona la programación web:

NO te conectas directo (por punteros o similar) a una BD: Creas un JSON (datos) que envía por POST los datos de conexión y dentro de un hilo se hace todo.

Igualmente en una app el multi-hilo se maneja mejor de forma similar: Mandas comandos/datos y dentro del hilo que realmente "tiene" la conexión devuelves los datos, pero nunca das acceso directo a un recurso desde multiples hilos.

TODO esto te lo debe dar una libreria de alto nivel y por ende no deberias preocuparte de como se hace, solo que nunca "mandas" un objeto como una conexion o archivo o formulario, solo la PETICION de que el otro lado haga algo. Es como el modelo "cliente/servidor". Ok?
---

Ahora lo mas simple es solo tener 2 hilos a la vez: El que maneja la UI que es por defecto y no hay nada que tengas que hacer ahi y uno de background" para descargar tareas que no bloqueen la UI. En tal caso es mucho mas fácil, pero sigue la consigna: NO pases (ni con locks hechos a pelo, todo debe ser por medio de la libreria de alto nivel) recursos ni objetos "pesados", pasa un record/json/dato plano que le comunique al otro lado lo que debe hacer y devuelve datos de igual manera.

--

Si tienes un requerimiento que sea mas complejo que 2 hilos, entonces seria bueno que lo indiques, porque hay varios patrones de diseño que te permiten resolver esto de forma correcta y con mucho menos lios.

P.D: Estos patrones lo explican en esta libreria: https://zguide.zeromq.org/docs/chapter2/ que es multi-lenguaje/plataforma y es de los recuersos que mejor explican los diseños comunes de este tema.

P.D.2: La libreria que use hace tiempo que resuelve todo esto en Delphi es http://www.omnithreadlibrary.com. Parece que la forma directa en Delphi en ultimas versiones es https://blogs.embarcadero.com/learn-...-using-delphi/

Neftali [Germán.Estévez] 08-04-2021 09:26:13

Cita:

Empezado por Angel.Matilla (Mensaje 540556)
Buenas a todos. Estoy tratando de enterarme de como funcionan los hilos (no los he usado nunca) y he estado buscando por el foro pero todo, o casi, lo que encuentro es para gente que ya conoce algo del tema. ¿Podéis facilitarme algún sitio en el que comprender como funcionan los hilos, construirlos, etc.? GRacias


Si explicas algo del proceso que quieres realizar con hilos tal vez podamos ayudarte.
Yo he programado cosas con hilos en Delphi y cuando entiendes un poco cómo funcionan no son complicados.
Simplemente tener claro que hay determinadas cosas que no debes hacer.


Lo dicho, según qué procesos pueden ser sencillos, incluso moverlos desde una programación "normal" a una "con hilos", puede ser relatívamente fácil, pero al final todo depende; Depende del proceso que debas oimplementar...

Angel.Matilla 08-04-2021 09:43:44

Gracias a todos por vuestras respuestas. Empezaré por tratar de ir leyendo los enlaces que me habéis pasado.
Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 540560)
Si explicas algo del proceso que quieres realizar con hilos tal vez podamos ayudarte.
Yo he programado cosas con hilos en Delphi y cuando entiendes un poco cómo funcionan no son complicados.
Simplemente tener claro que hay determinadas cosas que no debes hacer.

No es que tenga en mente hacer nada en concreto pero, imagino que como todos, siempre estoy tratando de ampliar lo que sé y me ha parecido un tema interesante para poder mejorar el rendimiento de por ejemplo el uso de las BB.DD.

Casimiro Noteví 08-04-2021 11:09:40

Cita:

Empezado por Angel.Matilla (Mensaje 540561)
Gracias a todos por vuestras respuestas. Empezaré por tratar de ir leyendo los enlaces que me habéis pasado.
No es que tenga en mente hacer nada en concreto pero, imagino que como todos, siempre estoy tratando de ampliar lo que sé y me ha parecido un tema interesante para poder mejorar el rendimiento de por ejemplo el uso de las BB.DD.

En general, con firebird, es la que usas, no vas a tener que usar hilos porque firebird usa un sistema interno que aprovecha la capacidad "multicore" de las cpu para lanzar las consultas a los "cores" más desocupados, asi que puedes ir haciendo consultas/inserts/etc. tranquilamente porque la propia firebird se encarga de "balancear" la carga entre los distintos cores.

Angel.Matilla 07-05-2021 18:24:27

Cita:

Empezado por Casimiro Notevi (Mensaje 540563)
En general, con firebird, es la que usas, no vas a tener que usar hilos porque firebird usa un sistema interno que aprovecha la capacidad "multicore" de las cpu para lanzar las consultas a los "cores" más desocupados, asi que puedes ir haciendo consultas/inserts/etc. tranquilamente porque la propia firebird se encarga de "balancear" la carga entre los distintos cores.

Perdona por el retraso. Gracias por las indicaciones.

Casimiro Noteví 07-05-2021 18:50:14

Menos mal que contestaste, llevo sin poder dormir desde entonces esperando la respuesta :D:D:D


La franja horaria es GMT +2. Ahora son las 16:23:08.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi