¿Existe un algoritmo conocido para implementar un grupo de conexiones? Si no, ¿cuáles son los algoritmos conocidos y cuáles son sus intercambios?
¿Qué patrones de diseño son comunes al diseñar y programar un grupo de conexiones?
¿Hay algún ejemplo de código que implemente un grupo de conexiones utilizando boost.asio?
¿Es una buena idea usar un grupo de conexiones para conexiones persistentes (no http)?
¿Cómo está relacionado el subproceso con la agrupación de conexiones? ¿Cuándo necesitas un hilo nuevo?¿Cómo programar un grupo de conexiones?
Respuesta
Si usted está buscando una política pura rosca-pooling (puede ser una conexión o cualquier otro recurso) hay dos enfoques simples a saber: -
La mitad de sincronización/Media asíncrono modelo (generalmente utilizando utilizando mensajes colas para pasar información).
Modelo de Líderes/Seguidores (por lo general, utiliza colas de solicitud para pasar información).
El primer enfoque es así: -
- Se crea un grupo de subprocesos a manejar un recurso. A menudo, este tamaño (número de hilos) debe ser configurable. Llame a estos hilos 'Trabajadores'.
- Luego crea un hilo maestro que enviará el trabajo a Trabajador hilos. El programa de aplicación distribuye la tarea como un mensaje al hilo maestro.
- El hilo principal pone el mismo en el mensaje Q de un hilo elegido Trabajador y el trabajador hilo remueve a sí mismo desde la piscina . Elegir y eliminar el Trabajador thread necesita sincronización.
- Después de que Trabajador completa la tarea , vuelve al grupo de subprocesos.
El propio hilo principal puede consumir las tareas que obtiene en de orden de llegada o una prioridad manera. Esto dependerá de tu implementación.
El segundo modelo (líder/Seguidores) es algo como esto: -
- Crear un grupo de subprocesos. Inicialmente, todos son Trabajadores. A continuación, elija un Líder, descanse automáticamente; todos se convierten en seguidores. Tenga en cuenta que la elección de a Leader tiene que estar sincronizada.
- Poner todos los datos para ser procesados en un solo pedido Q.
- El grupo de threads Leader dequeues tarea. A continuación, inmediatamente elige nuevo Leader y comienza a ejecutar la tarea.
- El nuevo Leader retoma la siguiente tarea .
También puede haber otros enfoques, pero los descritos anteriormente son simples y funcionan con la mayoría de los casos de uso.
La mitad de sincronización/Media asíncrono mayor debilidad: -
- Superior cambio de contexto, sincronización y copiar datos por encima.
Líder/Follwers mayor debilidad: -
- Implementación complejidad de Líder elección en la agrupación de hebras.
Ahora puede decidir por sí mismo el enfoque más correcto. HTH,
Esto es realmente útil. Te agradezco mucho. El segundo enfoque parece interesante, pero ¿cómo se seleccionaría un líder? ¿Sería el objeto de hilo lo que está disponible? ¿Qué pasa si no hay hilos disponibles en el grupo? ¿Debería el líder actual ejecutar la tarea y esperar que otro hilo esté disponible o debería mantener su papel de líder? ¿El conjunto de conexiones es básicamente una colección de hilos? ¿Debería ser un vector? ¿Una lista? ¿Un conjunto? En este enfoque, ¿cómo conseguiría las tareas necesarias (Enviado por los clientes)? ¿Es el líder responsable de eso? –
Después de recibir el nombre de esos patrones comunes busqué en Google y encontré esto: http://www.kircher-schwanninger.de/michael/publications/lf.pdf Lo leeré y se ve interesante. –
@the_drow: Leader es solo otro hilo pero que tiene que tomar la tarea. Siempre debe haber un líder, si todos los hilos del grupo están ocupados, entonces la tarea debe esperar en la solicitud Q para que el nuevo líder sea elegido. Una vez que haya un líder, se encargará de la tarea. De nuevo, esta solicitud Q puede estar basada en FCFS o en prioridad. El enlace que encontraste es de hecho decente, puedes considerar los enfoques que se dan allí. – Abhay
- 1. ¿Cómo configura su grupo de conexiones?
- 2. Número óptimo de conexiones en el grupo de conexiones
- 3. Crear un grupo de conexiones de base de datos
- 4. Cuántas conexiones están disponibles en el grupo de conexiones ADO.NET
- 5. desconexión del grupo de conexiones android
- 6. ¿Realmente necesita un grupo de conexiones db para unicornios?
- 7. ¿Qué sucede cuando se agota un grupo de conexiones?
- 8. Scala manera de programar el grupo de ifs
- 9. ¿Cómo supervisar el grupo de conexiones activo en SQL Server?
- 10. Cómo encontrar lo que está usando las conexiones en mi grupo de conexiones
- 11. Grupo de conexiones de bases de datos concurrentes en Haskell
- 12. ¿Cómo programar un procedimiento almacenado?
- 13. ¿Cómo calcular el tamaño de un grupo de conexiones de bases de datos?
- 14. Hibernate c3p0 grupo de conexiones sin tiempo de espera conexiones inactivas
- 15. El grupo de conexiones JDBC no vuelve a abrir Conexiones en tomcat
- 16. Qué sucede cuando el grupo de conexiones Npgsql alcanza Max
- 17. ¿Cómo puedo crear un grupo de conexiones mysql usando la herramienta asadmin en el servidor GlassFish?
- 18. c3p0 acrónimo origen - jdbc nombre del grupo de conexiones
- 19. Javascript - ¿Cómo programar un contador de clics?
- 20. Al programar de manera programada un nuevo sitio web de IIS, ¿cómo puedo agregarlo a un grupo de aplicaciones existente?
- 21. Todas las conexiones en el grupo están en uso
- 22. ¿Cómo comenzar a programar un microcontrolador?
- 23. Python twisted: ¿cómo programar?
- 24. Obtener conexión a la base de datos desde un grupo de conexiones
- 25. ¿Puedo usar Apache mod_proxy como un grupo de conexiones, bajo Prefork MPM?
- 26. ¿Cómo encontrar fugas en la conexión del grupo de conexiones de db?
- 27. Cómo utilizar el grupo de conexiones con Java, MySQL y Tomcat 6
- 28. ¿Cómo puedo gestionar un grupo de tenedores en Perl?
- 29. Cómo programar una tarea Maven
- 30. ¿Cómo programar una consulta MySQL?
Una pregunta a la vez es una buena práctica aquí. –
Todos están relacionados, ¿preferiría que bombardeara stackflow con una pregunta para cada una de estas preguntas relacionadas? –
Creo que el problema es que su pregunta hace que la gente piense que no ha investigado el tema y que quiere todas las respuestas (similar a las preguntas sobre 'tareas'). Aunque no es una forma inválida de preguntar, hace que, en mi opinión, no sea fácil para las personas participar. –