Si bien leer sobre SQLite, yo tropezado con esta cita en el FAQ: "Threads are evil. Avoid them."¿Hay alguna alternativa práctica a los hilos?
Tengo un gran respeto por SQLite, así que no podía simplemente ignorar esto. Me puse a pensar qué más podría, de acuerdo con la política de "evitarlos", utilizar en su lugar para paralelizar mis tareas. Como ejemplo, la aplicación en la que estoy trabajando actualmente requiere una interfaz de usuario que siempre responda, y necesita sondear varios sitios web de vez en cuando (un proceso que toma al menos 30 segundos para cada sitio web).
Así que abrió el PDF vinculado desde que frecuentes, y, esencialmente, parece que el documento sugiere varias técnicas para aplicarse juntos con hilos, tales como barreras o memoria transaccional - en lugar de las técnicas para reemplazar las discusiones por completo.
Dado que estas técnicas no prescinden totalmente con hilos (a menos que no he entendido bien lo que dice el trabajo), puedo ver dos opciones: o bien el FAQ SQLite hace no literalmente significa lo que dice, o no existen enfoques prácticos que en realidad evita el uso de hilos por completo. ¿Hay alguno?
Sólo una pequeña nota en tasklets/programación cooperativa como alternativa - esto se ve muy bien en pequeños ejemplos, pero me pregunto si una aplicación a gran-ish IU-pesado puede ser prácticamente parallelized de una manera exclusiva cooperativa. Si lo ha hecho con éxito o sabe de tales ejemplos, esto ciertamente califica como una respuesta válida.
No voy a agregar esto como una respuesta porque no tengo ganas de darles cuerpo, sino: IO no bloqueante, multitarea cooperativa, multiprocesamiento + IPC ... y quizás hilos. La combinación correcta depende de la aplicación individual. – hobbs
Para el registro, las preguntas frecuentes de SQLite hacen referencia a "El problema con los hilos". A partir de su resumen: "Descartan las propiedades más esenciales y atractivas de la computación secuencial: comprensibilidad, previsibilidad y determinismo. Los hilos, como modelo de computación, son muy indeterministas, y el trabajo del programador se vuelve uno de poda que no determina. .. Defiendo el desarrollo de lenguajes de coordinación concurrentes basados en formalismos sólidos y compostables. Creo que tales lenguajes producirán programas mucho más confiables y más concurrentes ". –