bucle for no se ejecuta en paralelo

Tengo un código en C++ que intento paralelizar con OpenMPI, consiste en buscar los números primos hasta un tope indicado:

#include <vector> #include <cmath> #include <iostream> #include <omp.h> #include <ctime>  using namespace std; int main() {     unsigned t0, t1;     t0 = clock();     omp_set_num_threads(4);     auto maximo = 1000000ul; //numero maximo a buscar     // Criba secuencial     std::vector<int> primos{ 2 }; // Añadimos el 2 al array para poder saltarnos los pares     primos.reserve(maximo); #pragma omp parallel for     for (auto posible_primo = 3ul; posible_primo < maximo; posible_primo += 2) {         /* Comprobamos si es primo buscando si en el array hay algun         numero primo que lo divida, pero solo hasta raiz de n. */         const auto limite = sqrt(posible_primo);          bool es_divisible = false;         for (auto divisor : primos) {             if (limite < divisor)                 break;             if (es_divisible = !(posible_primo % divisor))                 break;         }           if (!es_divisible) {             primos.push_back(posible_primo);         }     }      for (auto primo : primos)         std::cout << primo << ' ';     t1 = clock();     double time = (double(t1 - t0) / CLOCKS_PER_SEC);     cout << "\n\n\tExecution Time: " << time << endl;     return 0; } 

Tengo que paralelizar el bucle exterior (el que recorre los números desde 3 hasta el límite superior), para ello he utilizado #pragma omp parallel for

Cuando ejecuto el algoritmo, tarda lo mismo que si quito la sentencia paralela.

¿Qué hago mal? tampoco se cómo hacer para evitar las condiciones de carrera en la escritura del número primo en el vector.

Por que se ejecuta el default del switch independientemente del valor?

En esta funcion para calcular el IMC, independientemente del valor que ingrese, se ejecuta el “default” y no logro ver el error. Probe con decimales y sin decimales y aparece lo mismo.

 var altura = parseInt(prompt("Ingresa tu altura")); var peso = parseInt(prompt("Ingresa tu peso"));  function calcularIMC (altura,peso){   return peso/altura**2; }   var imc = calcularIMC(altura,peso);  switch(imc){   case (imc<=18.5):     alert("Bajo peso");     break;    case ((imc>=18.5) && (imc<=24.9)):     alert("Peso normal");     break;    case ((imc>=25) && (imc<=29.9)):     alert("Peso sobrepeso");     break;    default:      alert("Obesidad");     break;  } 

Tengo 4 threads y dos se refieren a un objeto pero al hacer a un thread.sleep(x) no ejecuta ese thread para ambos objetos

Cree una ConcurrentLinkedQueue de strings, tengo dos colas y voy almacenando siempre datos (bucle en mi thread), luego por cada determinado tiempo una cola saca datos (bucle en thread) y luego la otra deberia tambien, pero ambas instrucciones de ambos threads se hacen al mismo tiempo, cuando necesito que por un tiempo se ejecute un thread y luego otro

Entrada entrada_cola1 = new Entrada(cola1);     Salida salida_cola1 = new Salida(cola1);     Entrada entrada_cola2 = new Entrada(cola2);     Salida salida_cola2 = new Salida(cola2);      System.out.println("------------------------");     System.out.println("INICIO DE SIMULACION");     System.out.println("------------------------");     entrada_cola1.start();     entrada_cola2.start();     salida_cola1.start();     salida_cola2.start();     while(true){         try{         salida_cola2.sleep(rojo);         } catch(Exception e){         }         System.out.println("--------------------------------------------------------------------------------------------------------------");         System.out.println("SEMAFORO CAMBIO COLOR: ROJO-VERDE PARA COLA A: Se encuentran "+cola1.size()+ " Carros en cola A");         System.out.println("SEMAFORO CAMBIO COLOR: VERDE-AMARILLO-ROJO PARA COLA B: "+cola2.size()+" Carros en cola B");         System.out.println("---------------------------------------------------------------------------------------------------------------");           try{         salida_cola1.sleep(rojo);         }catch(Exception e){         }         System.out.println("----------------------------------------------------------------------------------------------------------------");         System.out.println("SEMAFORO CAMBIO COLOR: VERDE-AMARILLO-ROJO PARA COLA A: "+cola1.size()+" Carros en cola A");         System.out.println("SEMAFORO CAMBIO COLOR: ROJO-VERDE PARA COLA B: "+cola2.size()+" Carros en cola B");         System.out.println("-----------------------------------------------------------------------------------------------------------------");          } 

Código que se ejecuta pero no parece terminar

Diseñé un juego de mesa en el que dibujo un texto en el que pregunto el color que el jugador quiere elegir antes de jugar. Entonces debería desaparecer pero no desaparece.

def runGame():     # Juega un solo juego cada vez que se llama a esta función.     # Restablece el tablero y el juego.      mainBoard, moveBoard = getNewBoard()     resetBoard(mainBoard)      # Reset the sailors and boat     sailors = []     white_sailors = []     black_sailors = []      sailors = resetSailors(sailors,mainBoard)      turn = random.choice(['player1', 'player2'])      # Dibuja el tablero de partida     drawBoard(mainBoard, sailors)     # ask the player what color they want.     playerTile, computerTile = enterPlayerTile() # <-- AQUÍ EL CÓDIGO QUE MUESTRA EL TEXTO      # Crea los objetos Surface y Rect para los botones "New Game" y "Hints"     newGameSurf = FONT.render('New Game', True, TEXTCOLOR, TEXTBGCOLOR2)     newGameRect = newGameSurf.get_rect()     newGameRect.topright = (WINDOWWIDTH - 8, 10)  def enterPlayerTile():     # Dibuja el texto y maneja los eventos de clic del mouse para permitir # el jugador elige el color que quiere ser. Devuelve     # [WHITE_TILE, BLACK_TILE] si el jugador elige ser WHITE,     # [BLACK_TILE, WHITE_TILE] si Black.      # Create the text.     textSurf = FONT.render('Do you want to be white or black?', True, TEXTCOLOR, TEXTBGCOLOR1)     textRect = textSurf.get_rect()     textRect.center = (int(WINDOWWIDTH / 2), int(WINDOWHEIGHT / 2))      xSurf = BIGFONT.render('White', True, TEXTCOLOR, TEXTBGCOLOR1)     xRect = xSurf.get_rect()     xRect.center = (int(WINDOWWIDTH / 2) - 60, int(WINDOWHEIGHT / 2) + 40)      oSurf = BIGFONT.render('Black', True, TEXTCOLOR, TEXTBGCOLOR1)     oRect = oSurf.get_rect()     oRect.center = (int(WINDOWWIDTH / 2) + 60, int(WINDOWHEIGHT / 2) + 40)      while True:         # Keep looping until the player has clicked on a color.         checkForQuit()         for event in pygame.event.get(): # event handling loop             if event.type == MOUSEBUTTONUP:                 mousex, mousey = event.pos                 if xRect.collidepoint( (mousex, mousey) ):                     return [WHITE_TILE, BLACK_TILE]                 elif oRect.collidepoint( (mousex, mousey) ):                     return [BLACK_TILE, WHITE_TILE]          # Draw the screen.         DISPLAYSURF.blit(textSurf, textRect)         DISPLAYSURF.blit(xSurf, xRect)         DISPLAYSURF.blit(oSurf, oRect)         pygame.display.update()         MAINCLOCK.tick(FPS) 

Mientras que deberia crearse los objetos Surface y Rect para los botones “New Game” y “Hints” despues enterPlayerTile() pero no desaparecie, incluso si dejo la función después de clic.

Por el contrario, en el código que me inspiró no tengo este problema.

Si lo necesites aqui esta el repositorio de mi entero codigo.

Se usa una conexión a base de datos por cada PreparedStatement que ejecuta cada hilo?

La pregunta es simple, uso hilos de ejecución y a cada hilo le paso la misma conexión a base de datos (Solo abro una conexión) lo que no se es, por ser una sola conexión, ¿se ejecutan los PreparedStatement paralelamente (por cada hilo simultáneamente) o se ejecuta uno a la vez haciendo un cuello de botella (se espera a que termine uno para ejecutar otro)?

Adjunto fragmento de codigo, aunque en realidad no es muy necesario.

NOTA: los PreparedStatement son independientes para cada hilo

    public int actualizaMetadata(PreparedStatement ps, DatosMetadata datosMetadata) throws Exception, SQLException {     int resultado;     int registrados = 0;     try {         ps.setBigDecimal(1, datosMetadata.getSubtotal());         ps.setBigDecimal(2, datosMetadata.getTotal_retenidos());         ps.setBigDecimal(3, datosMetadata.getTotal_trasladados());         ps.setBigDecimal(4, datosMetadata.getDescuento());         ps.setString(5, datosMetadata.getMetodoPago());         ps.setString(6, datosMetadata.getSerie());         ps.setString(7, datosMetadata.getFolio());         ps.setString(8, datosMetadata.getUsoCFDI());         ps.setString(9, datosMetadata.getMoneda());         ps.setString(10, datosMetadata.getUuid());         resultado = ps.executeUpdate();         if (resultado <= 0) {             throw new Exception("El UUID: " + datosMetadata.getUuid() + " No esta registrado en la tabla de Metadatos. ");         }         if (resultado > 0) {             registrados++;         }     } catch (SQLException e) {         throw new Exception(e.getMessage());     } catch (Exception ex) {         throw new Exception(ex.getMessage());     } finally {         ps.clearParameters();     }      return registrados; } 

no se ejecuta un envio de datos de un formulario

hola estoy tratando de guardar los datos de un formulario HTML básico en mi base de datos, en el primer código podrán ver cómo accedo al valor de los inputs del formulario y en el segundo como los envió a la base de datos el problema radica en que no me da errores ni nada de hecho no me guarda los datos en la base de datos,el segundo código utilizando esa condicional descubrí que no se esta ejecutando alguien sabe cual podrías ser el error ya busque en varias paginas pero ninguna me da una respuestas.

estoy trabajando bajo MVC, si necesitan mas codigo me lo indican y lo agrego Gracias

/*============================================= 			CREACION DE USUARIO 	=============================================*/ 	public static  function ctrCrearUsuario(){ 		if (isset($  _POST["nuevoUsuario"])) { 				 if(preg_match('/^[a-zA-Z0-9ñÑáéíóúÁÉÍÓÚ ]+$  /', $  _POST["nuevoNombre"]) &&    preg_match('/^[a-zA-Z0-9]+$  /', $  _POST["nuevoUsuario"]) &&    preg_match('/^[a-zA-Z0-9]+$  /', $  _POST["nuevaContraseña"])){ 			                    $  tabla = "usuarios";                    $  datos = array("nombre"=>   $  _POST["nuevoNombre"],                    	          "usuario" => $  _POST["nuevoUsuario"],                    	          "password"=> $  _POST["nuevaContraseña"], 				  "perfil"  => $  _POST["nuevoPerfil"]);                              $  respuesta =ModeloUsuarios::mdlIngresarUsuarios($  tabla, $  datos);                                        if ($  respuesta==="ok"){                         echo "guardado"                    }

 public static function mdlIngresarUsuarios($  tabla, $  datos){  	$  stmt = Conexion::conectar()->prepare("INSERT INTO $  tabla(nombre, usuario, password, perfil, foto) VALUES (:nombre, :usuario, :password, :perfil, :foto)");  	$  stmt->bindParam(":nombre", $  datos["nombre"], PDO::PARAM_STR); 	$  stmt->bindParam(":usuario", $  datos["usuario"], PDO::PARAM_STR); 	$  stmt->bindParam(":password", $  datos["password"], PDO::PARAM_STR); 	$  stmt->bindParam(":perfil", $  datos["perfil"], PDO::PARAM_STR); 	$  stmt->bindParam(":foto", $  datos["foto"], PDO::PARAM_STR);     if ($  stmt->execute()) {        return "ok";    }    else{        return "error";    }   	$  stmt->close(); 	 	$  stmt = null;  }

Como optimizar un proceso que se ejecuta cada 3 segundos sin que cargue el servidor

Tengo la siguiente situación: estoy realizando un proceso cada 3 segundos con la función de javascript (setInterval) donde me conecto a una api (twilio), que leo los datos y después los inserto en la base de datos.

El proceso comienza a funcionar desde el momento en que el usuario inicia sesión en el sistema y se mantiene ejecutando. Aproximadamente como la hora de estar usando el sistema, se comienza a poner lento las peticiones que le hago al servidor medianamente el navegador, lo mismo me sucede si me aumenta el numero de usuarios conectado al sitio. En cuanto detengo el proceso, el servidor se normaliza y a la hora de cargar las paginas lo hace rápido.

Mi pregunta es de que forma puedo poner a correr este proceso de que no me cargue el servidor.

A continuación les dejo el código para ver si me pueden ayudar.

Gracias.

En el javascript:

setInterval('loadnoti()', 3000);  function loadnoti() {     $  .post('index.php?c=sendsms&f=sendnoti', function (data) {         $  ("#idnoti").html(data);     }); } 

En el php:

case 'sendnoti':      $  twilio = new Client($  sid, $  token);      $  messages = $  twilio->messages         ->read(array(), 20);     //print_r($  messages);      foreach ($  messages as $  record) {          if ($  record->status == 'received') {              if (substr($  record->sid, 0, 2) == 'MM') {                 $  media = $  twilio->messages($  record->sid)                     ->media                     ->read(array(), 20);                 foreach ($  media as $  records) {                     $  media = $  twilio->messages($  record->sid)                         ->media($  records->sid)                         ->fetch();                     $  uriimages =  substr("https://api.twilio.com" . $  media->uri, 0, -5);                 }             }              $  datos = array(                 'sfrom' => $  record->to,                 'sto' => $  record->from,                 'sbody' => $  record->body,                 'sid' => $  record->sid,                 'status' => $  record->status,                 'imagen' => $  uriimages             );             $  sen->get_smsval($  record->sid, $  datos);         }         echo $  sen->get_smsnoti($  sfrom, $  tipo);     }      break; 

.html no ejecuta lo que he escrito

tengo un pequeño problema con un html que estoy practicando. Resulta que estoy tomando un pequeño curso de programación en el cual estamos viendo Html y me ha tocado una “tarea” sobre el comando “if” a modo de práctica, el problema es que he escrito el código, tal cual me ha dicho el profesor, pero al momento de ejecutar el archivo, éste no hace nada, a continuación, dejaré lo que he escrito para que me puedan ayudar, de antemano muchas gracias.

Aqui está

PHPMAILER ejecuta todo menos $mail->Send();

estoy con un script para informar de la falta de stock mediante e-mail y no hay manera de hacerlo funcionar llevo todo el dia con este problema y no hay manera de hacerlo funcionar.

colo cando echos ejecuta absolutamente todo menos el Send();

Ademas estoy usando la ultima version de php mayler que deveria de ser la mas estable y en el proyecto de un compañero funciona pero este no los tenemos casi iguales y no funciona.

 <?php     session_start();     error_reporting(E_ERROR);     if ($  _GET[id]!='') {         require('conexion.php');         require 'class.phpmailer.php';         $  id = $  _GET[id];         $  select=mysqli_query($  con,"SELECT Cantidad FROM g_stock WHERE Id = '$  id'");         $  cantidad=mysqli_fetch_array($  select);         if($  cantidad['Cantidad']>0){             $  sql = "UPDATE g_stock SET Cantidad=Cantidad-1 WHERE Id = '$  id'";             if (mysqli_query($  con, $  sql)) {                 echo "OK";             } else {                 echo "Error operando registro";             }             $  select1=mysqli_query($  con,"SELECT Cantidad, Cantidad_minima FROM g_stock WHERE Id = '$  id'");             $  cantidad=mysqli_fetch_array($  select1);             echo $  cantidad;             if ($  cantidad['Cantidad'] <= $  cantidad['Cantidad_minima']){                 $  id=$  _GET[id];                 $  select3=mysqli_query($  con,"SELECT * FROM g_stock WHERE Id = '$  id'");                 $  articulo=mysqli_fetch_array($  select3);                 $  mensaje="<p>Se acaba de reducir el stock de ".$  articulo['Articulo']." ahora mismo hay ".$  articulo['Cantidad']." unidades de ".$  articulo['Cantidad_minima']."que deberia haber como minimo.</p>";                 $  mail = new PHPMailer;                 $  mail->IsSMTP();                 $  mail->Host = 'smtp.cysnet.info';                  $  mail->SMTPAuth=true;                 $  mail->From = 'alchemymachinelearning@gmail.com';                 $  mail->Username = 'alchemymachinelearning@gmail.com';                 $  mail->FromName = 'Web ERP';                 $  mail->Password ='alchemyVerifications';                 $  mail->AddAddress('miniguez@skootik.com');                 $  mail->WordWrap = 50;                                                  $  mail->IsHTML(true);                  $  mail->Subject = "Mensaje de falta de Stock";                 $  mail->Body = $  mensaje;                 echo $  mail->Body;                 /*?>                     <script>console.log('<?php echo $  mail; ?>');</script>                 <?php*/                 $  exito = $  mail->Send();                 echo $  exito;                 /*if(!$  mail->Send()) {                    echo "<span style='color:red;'>Tu mensaje no se ha podido enviar. EscrĂ­benos a info@skootik.com</span>";                    echo 'Mailer Error: ' . $  mail->ErrorInfo;                 }*/             }             mysqli_close($  con);             header('Location: ../stock.php');             exit;         }     } ?>