Controlando o Fluxo de Execução de Instruções

Resumo : neste tutorial você aprenderá como controlar o fluxo de execução de instruções.

O sqlite3módulo fornece dois métodos para controlar o fluxo de execução de instruções. O serialize()método permite executar instruções em modo serializado, enquanto o parallelize()método executa as instruções em paralelo.

Vamos examinar cada método detalhadamente para entender como ele funciona.

Executando instrução em modo serializado com Database.serialize

O serialize()método coloca o modo de execução em modo serializado. Isso significa que apenas uma instrução pode ser executada por vez. Outras instruções aguardarão em uma fila até que todas as instruções anteriores sejam executadas.

Após o serialize()retorno do método, o modo de execução é definido novamente para o modo original.

É seguro aninhar o serialize()método da seguinte maneira:

db.serialize(() => {
  // queries will execute in serialized mode
  db.serialize(() => {
    // queries will execute in serialized mode
  });
  // queries will execute in serialized mode
});
Linguagem de código:  JavaScript  ( javascript )

Suponha que você queira executar as três instruções a seguir em sequência:

  1. Crie uma nova tabela.
  2. Insira dados na tabela.
  3. Consultar dados da tabela.

Para fazer isso, você coloca essas instruções no serialize()método da seguinte maneira:

const sqlite3 = require('sqlite3').verbose();

// open the database connection
let db = new sqlite3.Database(':memory:', (err) => {
  if (err) {
    console.error(err.message);
  }
});

db.serialize(() => {
  // Queries scheduled here will be serialized.
  db.run('CREATE TABLE greetings(message text)')
    .run(`INSERT INTO greetings(message)
          VALUES('Hi'),
                ('Hello'),
                ('Welcome')`)
    .each(`SELECT message FROM greetings`, (err, row) => {
      if (err){
        throw err;
      }
      console.log(row.message);
    });
});

// close the database connection
db.close((err) => {
  if (err) {
    return console.error(err.message);
  }
});
Linguagem de código:  JavaScript  ( javascript )

Porque o run()método retorna um Databaseobjeto para que possamos encadear as chamadas do método.

Vamos executar o programa para ver como funciona.

> node serialize.js
Hi
Hello
Welcome
Linguagem de código:  JavaScript  ( javascript )

Funciona conforme o esperado.

Observe que se você não colocar três instruções no serialize()método, todas as três instruções poderão ser executadas em paralelo, o que causaria um erro.

Executando instruções em paralelo com Database.parallelize

Se você deseja que as consultas agendadas sejam executadas em paralelo, coloque-as no parallelize()método.

Semelhante ao serialize()método, é seguro aninhar o parallelize()método da seguinte maneira:

db.parallelize(() => {
  // queries will execute in parallel mode
  db.parallelize(() => {
    // queries will execute in parallel mode
  });
  // queries will execute in parallel mode
});
Linguagem de código:  JavaScript  ( javascript )

Para demonstração, criaremos uma nova função que calcula a soma de dois números utilizando o banco de dados SQLite e colocaremos as chamadas de função no parallelize()método conforme mostrado no exemplo a seguir:

const sqlite3 = require('sqlite3').verbose();

// open a database connection
let db = new sqlite3.Database(':memory:', (err) => {
  if (err) {
    console.error(err.message);
  }
});

db.parallelize(() => {
  dbSum(1, 1, db);
  dbSum(2, 2, db);
  dbSum(3, 3, db);
  dbSum(4, 4, db);
  dbSum(5, 5, db);
});

// close the database connection
db.close((err) => {
  if (err) {
    return console.error(err.message);
  }
});

function dbSum(a, b, db) {
  db.get('SELECT (? + ?) sum', [a, b], (err, row) => {
    if (err) {
      console.error(err.message);
    }
    console.log(`The sum of ${a} and ${b} is ${row.sum}`);
  });
}
Linguagem de código:  JavaScript  ( javascript )

Vamos executar o parallelize.jsprograma.

>node parallelize.js
The sum of 5 and 5 is 10
The sum of 1 and 1 is 2
The sum of 4 and 4 is 8
The sum of 3 and 3 is 6
The sum of 2 and 2 is 4
Linguagem de código:  JavaScript  ( javascript )

Como você pode ver na saída, a ordem de execução não é a mesma que foi chamada no programa.

Observe que as instruções são executadas em paralelo, portanto, cada vez que você executa o programa, a ordem de execução pode ser diferente.

Neste tutorial, você aprendeu como controlar o fluxo de execução das instruções.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *