SQL Scheduler: Cooperative Mode

Muitas pessoas ficam curiosas para saber o que significa o SQL Scheduler e qual o papel que ele desempenha. Por um tempo pensava que não valeria a pena ficar falando sobre esse componente, uma vez que ele é bastante interno. Por outro lado, esse é um conhecimento indispensável para àqueles que pretendem ler um Dump no SQL Server. O primeiro passo é diferenciar o modo multitarefa presente no Windows e SQL Server: Preemptive Mode e Cooperative Mode.

Relembrando os velhos tempos do Windows 3.1 e Windows 98:

  • Windows 98 uses preemptive multitasking for Win32-based applications. This means that the operating system takes control away from or gives control to another running task, depending on the needs of the system.

Atualmente, o Windows e os Sistemas Operacionais modernos utilizam o Preemptive Mode: cada aplicação/thread recebe uma parcela de tempo (quantum) para ocupar o processamento disponível. Quando esse quantum é excedido (em torno de 10-100 milissegundos), o Sistema Operacional realiza a transição para a próxima aplicação/thread. Esse processo permite que as tarefas sejam realizadas simultaneamente, dando a impressão de paralelismo mesmo quando existe uma única unidade de CPU.

Abusando dos dons artísticos, seria como um relógio que determina qual será a tarefa executada:

Clock simulating a preemptive scheduling 

Esse comportamento é diferente da versão antiga do Windows que ainda rodava no Cooperative Mode.

  • With Windows 3.1, applications ran concurrently through a method known as cooperative multitasking. Using this method, the operating system required an application to check the message queue periodically and to relinquish control of the system to other running applications. Applications that did not check the message queue would effectively "hog" CPU time and prevent the user from switching to another application. For compatibility reasons, Windows 98 cooperatively multitasks Win16-based applications.

No tempo do Windows 3.1, as aplicações e o Sistema Operacional trabalhavam juntos para criar o multitasking das tarefas. Cada aplicação era responsável por fazer parte do seu processamento e manualmente repassar o controle de volta ao Windows. Era o processo de YIELD: na tradução literal seria algo como “dar a passagem”.

Novamente utilizando-me dos dons artísticos, o modo cooperativo seria similar a uma brincadeira de passa anel: cada tarefa vai passando o anel para o próximo do círculo.

image

Encerro o artigo dizendo que o SQL Server, de forma similar ao Windows 3.1,  implementa o Cooperative Mode para a execução de tarefas ao invés do Preemptive Mode. Isso pode parecer que voltamos no passado.

Existem problemas e desvantagens, isso é verdade… mas existe um forte motivo pelo qual se utiliza um gerenciamento próprio de thread: “SQL knows better” -  SQL Server conhece mais sobre ele mesmo do que o Windows. Ao invés de depender do gerenciamento multithread do Sistema Operacional, utilizamos uma arquitetura mais adequada para garantir a escalabilidade do produto.

No próximo artigo, falaremos sobre o Scheduler.