BRPI1010168B1 - método para gerenciar um thread pool e sistema para gerenciar um thread pool - Google Patents

método para gerenciar um thread pool e sistema para gerenciar um thread pool Download PDF

Info

Publication number
BRPI1010168B1
BRPI1010168B1 BRPI1010168A BRPI1010168A BRPI1010168B1 BR PI1010168 B1 BRPI1010168 B1 BR PI1010168B1 BR PI1010168 A BRPI1010168 A BR PI1010168A BR PI1010168 A BRPI1010168 A BR PI1010168A BR PI1010168 B1 BRPI1010168 B1 BR PI1010168B1
Authority
BR
Brazil
Prior art keywords
thread
task
tasks
pool
task list
Prior art date
Application number
BRPI1010168A
Other languages
English (en)
Inventor
Wang Ping
Original Assignee
Zte Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Zte Corp filed Critical Zte Corp
Publication of BRPI1010168A2 publication Critical patent/BRPI1010168A2/pt
Publication of BRPI1010168B1 publication Critical patent/BRPI1010168B1/pt

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/485Task life-cycle, e.g. stopping, restarting, resuming execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0706Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment
    • G06F11/0715Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment in a system implementing multitasking
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0751Error or fault detection not based on redundancy
    • G06F11/0754Error or fault detection not based on redundancy by exceeding limits
    • G06F11/0757Error or fault detection not based on redundancy by exceeding limits by exceeding a time limit, i.e. time-out, e.g. watchdogs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1479Generic software techniques for error detection or fault masking
    • G06F11/1482Generic software techniques for error detection or fault masking by means of middleware or OS functionality
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3409Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for performance assessment
    • G06F11/3419Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for performance assessment by assessing time
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/88Monitoring involving counting
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/5011Pool
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/5018Thread allocation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/508Monitor

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • Debugging And Monitoring (AREA)

Abstract

método para gererenciar um thread pool e sistema para gerenciar um thread pool método para gerenciar um thread pool, compreendendo: avaliação, regularmente, de cada thread no thread pool para monitorar a duração de execução de cada thread para desempenhar uma tarefa atual; e quando ela é determinada de acordo com as durações de execução monitoradas que uma thread é executada em tempo extra, criando uma nova thread para desempenhar tarefas que deveriam ser desempenhadas pela thread que é executada em tempo extra. a invenção também provê um sistema para gerenciar um thread pool. a presente invenção reduz o período de tempo para desempenhar as tarefas nas listas de tarefas correspondentes e pode evitar, em um determinado grau, um armazenamento excessivo enorme e duradouro de tarefas, melhorando assim a eficiência de execução dos servidores de aplicativos. ademais, por meio da adição do mecanismo de monitoramento de tarefa, a thread executada em tempo extra pode ser descoberta em tempo e novas threads podem ser criadas em tempo para substituir a thread executada em tempo extra para desempenhar tarefas, provendo assim um mecanismo de reprodução de thread e um mecanismo de tolerância à falha para a tecnologia de thread pool.

Description

MÉTODO PARA GERERENCIAR UM THREAD POOL E SISTEMA PARA GERENCIAR UM THREAD POOL
CAMPO TÉCNICO [001] A invenção atual se refere à tecnologia de aplicativo de computador no campo da comunicação e, especialmente, a um método para gerenciar um thread pool e um sistema respectivo.
HISTÓRICO DA TÉCNICA RELACIONADA [002] Em um aplicativo baseado em programação orientada a objetos, a criação e a destruição de um objeto consomem tempo, uma vez que os recursos de memória ou outros recursos adicionais necessários devem ser obtidos ao criar o objeto. Ainda mais em um aplicativo baseado em tecnologia de programação em JAVA, uma vez que a máquina virtual em JAVA (JVM) tentará rastrear cada objeto, deste modo, os recursos do sistema serão recuperados depois que o objeto for destruído.
[003] Em aplicações práticas, é bastante comum em um servidor de aplicativos, baseado em programação orientada a objetos, especialmente em um aplicativo da WEB, que um servidor de aplicativos responda à solicitação do cliente com tecnologia thread. Se o servidor de aplicativos cria uma thread para cada solicitação, o custo será consideravelmente grande, uma vez que isso gerará um grande número de atos de criar e destruir threads, e faz com que o servidor de aplicativos gasta muito tempo e recursos do sistema, inclusive possivelmente mais que o tempo e recursos gastos ao lidar com as solicitações reais do usuário, em criar e destruir threads.
[004] Apesar dos custos em criar e destruir
Petição 870190119756, de 18/11/2019, pág. 13/50
2/29 threads, a thread para uma ação também consome recursos do sistema. Se uma JVM gera várias threads em um curto período de tempo, o sistema pode apresentar falta de recursos devido ao consumo excessivo de memória ou excesso de comutação. Para evitar a falta de recursos, um programa de aplicativo de servidor precisa de alguns esquemas para limitar o número de solicitações a serem processadas, em um dado período, para reduzir, o máximo possível, os tempos para criar e destruir threads. Especialmente para criar e destruir determinadas threads com grande consumo de recursos, seria melhor que o suporte fosse feito por meio do uso de objetos existentes, o máximo possível. Esta é a razão para a geração da tecnologia “thread pool”.
[005] A tecnologia thread pool faz com que o custo para criar threads seja distribuído em várias tarefas, por meio da reutilização das threads por várias tarefas. Sua vantagem é que o atraso provocado pela criação de threads seja eliminado e a resposta de um programa de aplicativo seja mais rápida, uma vez que a thread já existe quando chega uma solicitação do cliente.
[006] Entretanto, a tecnologia de gerenciamento de thread pool existente somente mantém um grupo de threads de processo e uma lista de tarefas, bem como as threads de processo, no grupo de threads, são utilizadas para desempenhar circularmente as tarefas na lista de tarefas. Pelo uso da tal tecnologia de gerenciamento de thread, uma vez que ocorre uma exceção durante o processo de desempenho de tarefa, por exemplo, o tempo para uma thread desempenhar, uma determinada tarefa é muito longa ou uma thread cai, a eficiência de desempenhar uma tarefa por meio do servidor de
Petição 870190119756, de 18/11/2019, pág. 14/50
3/29 aplicativos será influenciada. Uma vez que o servidor de aplicativos aceita continuamente solicitações dos clientes e efetua o processamento do suporte, a probabilidade de ocorrência de exceções aumentará conforma aumentam as solicitações. Entretanto, a tecnologia de gerenciamento de thread pool existente carece de monitoramento respectivo ou de capacidade de auto-recuperação adequadamente, o número de threads de processo no thread pool do servidor de aplicativos diminuirá gradualmente, devido à queda das threads, bem como também diminuirá, adicionalmente, a eficiência para a performance das tarefas.
SUMÁRIO DA INVENÇÃO [007] As realizações da invenção proveem um método para gerenciar uma thread pool e seu respectivo sistema de acordo com as reivindicações independentes anexadas para melhorar a eficiência do processamento de tarefas de um servidor de aplicativos, com o uso da tecnologia de gerenciamento de thread pool e para melhorar a reprodutibilidade do thread pool. Melhorias e modalidades adicionais são fornecidas nas reivindicações dependentes.
[008] O método para gerenciar um thread pool, provido por um exemplo da invenção, compreende as seguintes etapas de:
avaliação regular de cada thread, no thread pool, para monitorar a duração de execução de cada thread para performance de uma tarefa atual; e quando for determinado, de acordo com as durações de execução monitoradas, que uma thread é executada por tempo extra, criando uma nova thread para desempenhar tarefas que deveriam ser desempenhadas pela thread, que é executada por
Petição 870190119756, de 18/11/2019, pág. 15/50
4/29 tempo extra.
[009] Antes da etapa da thread recentemente criada, desempenhando as tarefas que deveriam ser desempenhadas pela thread, que é executada por tempo extra, o método compreende ainda: apagar um valor de contagem de detecção referente à thread;
a etapa de avaliar, regularmente, cada thread compreende: em cada período, avaliar todas as threads no thread pool, uma a uma, bem como adicionar o valor de unidade 1 ao valor de contagem de detecção da thread que foi avaliada, verificando se o valor de contagem de detecção da thread excede um limiar e, caso positivo, considerando a thread que é executada por tempo extra; ou ainda, considerando a thread que não é executada por tempo extra.
as threads, no thread pool, uma para uma referentes às listas de tarefas;
o método adicional compreende ainda: cada thread que desempenha tarefas em uma lista respectiva de tarefas;
as tarefas que devem ser desempenhadas pela thread, que é executada por tempo extra, são tarefas na lista de tarefas respectivas para uma thread que é executada por tempo extra.
[010] Antes da etapa da thread recentemente criada desempenhando as tarefas que deveriam ser realizadas pela thread que é executada por tempo extra, o método compreende ainda: estabelecer uma relação pertinente entre a lista de tarefas referente à thread que é executada com tempo extra e a thread recentemente criada, bem como substituir uma relação correspondente entre a lista de tarefas e a thread que é executada com tempo extra com a relação correspondente
Petição 870190119756, de 18/11/2019, pág. 16/50
5/29 recentemente estabelecida.
[011] As threads uma para uma se referem às listas de tarefas por meio dos identificadores de threads e os valores de índice das listas de tarefas;
a etapa da thread que desempenha tarefas compreende: verificar se o identificador de thread é compatível com o identificador de thread referente ao índice de valor de uma lista de tarefas atuais na relação pertinente e, caso positivo, entregar as tarefas na lista de tarefas atuais à thread, de acordo com o mecanismo first in first out [primeiro a entrar, primeiro a sair], bem como usar a thread para desempenhar as tarefas recebidas; caso negativo, finalizando o fluxo para o desempenho de tarefas.
[012] Antes da etapa de cada thread que desempenha tarefas, em uma lista de tarefas pertinente, o método compreende ainda: obter identificadores de tarefas a serem atribuídas e realizar a operação de módulo nos identificadores obtidos das tarefas e o número de threads no thread pool; atribuir tarefas a serem atribuídas à lista de tarefas cujo índice de valor é um valor de resultado da operação de módulo;
ou, antes da etapa de cada thread que desempenha as tarefas na lista de tarefas pertinentes, o método compreende ainda: realizar a operação de módulo em um número total de tarefas atualmente atribuídas no thread pool e o número de threads no thread pool; e atribuindo as tarefas a serem atribuídas à lista de tarefas cujo índice de valor é o valor de resultado da operação de módulo.
[013] Antes da etapa de atribuição de tarefas a ser atribuídas à lista de tarefas cujo valor de índice é o
Petição 870190119756, de 18/11/2019, pág. 17/50
6/29 valor de resultado da operação de módulo, o método compreende ainda: verificar se o número de tarefas, na lista de tarefas cujo valor de índice é o valor de resultado da operação de módulo é menor que o número máximo de tarefas em espera permitidas e, caso positivo, avançar à etapa de atribuição de tarefas a serem atribuídas à lista de tarefas cujo valor de índice é o valor de resultado da operação de módulo.
[014] Também é provido um sistema para gerenciar um thread pool na realização da invenção, compreendendo:
uma lista de tarefas, que está configurada para armazenar tarefas a serem processadas;
um módulo que desempenha tarefas, que está configurado para utilizar cada thread para realizar as tarefas pertinentes; e um módulo de monitoramento de tarefas, que está configurado para avaliar, regularmente, cada thread no thread pool para monitorar a duração de execução de cada thread para desempenhar uma tarefa atual; e criar uma nova thread quando determinado, de acordo com as durações de execução monitoradas que uma thread executa por tempo extra, bem como instruir o módulo que desempenha tarefas para utilizar a thread recentemente criada para desempenhar tarefas que deveriam ser desempenhadas pela thread que é executada por tempo extra.
[015] As threads no thread pool uma para uma se referem às listas de tarefas;
o sistema compreende ainda:
um módulo de armazenamento de relação respectiva, que está configurado para armazenar as relações respectivas
Petição 870190119756, de 18/11/2019, pág. 18/50
7/29 entre as listas de tarefas e as threads no thread pool;
o módulo desempenhando tarefas está configurado para utilizar cada thread para realizar as tarefas em uma lista de tarefas pertinente;
o módulo de monitoramento de tarefas está configurado para instruir o módulo que desempenha tarefas para utilizar a thread recentemente criada para desempenhar as tarefas na lista de tarefas referente à thread, que é executada por tempo extra.
[016] O sistema compreende ainda:
um módulo de atribuição de tarefas, que está configurado para obter identificadores de tarefas a serem atribuídas e realizar a operação de módulo nos identificadores obtidos das tarefas e o número de threads no thread pool, bem como atribuir as tarefas a serem atribuídas à lista de tarefas cujo valor de índice é o valor de resultado da operação de módulo; ou realizar a operação de módulo no número total de tarefas atualmente atribuídas no thread pool e o número de threads no thread pool, bem como atribuir as tarefas a serem atribuídas à lista de tarefas cujo valor de índice é o valor de resultado da operação de módulo.
[017] Nas realizações da invenção, se existe uma thread de tempo extra em execução que é confirmada pelo monitoramento da duração de execução para desempenhar uma tarefa atuais pela thread, durante o processo das tarefas de desempenho de thread e, caso positivo, uma nova thread é criada e utilizada para desempenhar as tarefas que deveriam ser realizadas pela thread de tempo extra em execução, reduzindo assim o tempo para desempenhar as tarefas nas
Petição 870190119756, de 18/11/2019, pág. 19/50
8/29 listas de tarefas pertinentes, bem como em determinado grau, evitando um armazenamento excessivo, enorme e duradouro, de tarefas e, portanto, melhorando a eficiência de execução de um servidor de aplicativos. Ademais, por meio da adição de um mecanismo de monitoramento de tarefa no thread pool, nas realizações da invenção, o tempo extra de execução da thread pode ser descoberto no tempo e as novas threads podem ser criadas a tempo para substituir o tempo extra de execução da thread para desempenhar tarefas, provendo assim um mecanismo de reprodução de thread e um mecanismo de tolerância à falha para a tecnologia de thread pool.
BREVE DESCRIÇÃO DAS FIGURAS
- A Figura 1 ilustra a estrutura do thread pool em uma realização da invenção;
- A Figura 2 é um fluxograma para atribuição de uma tarefa a uma lista de tarefas, em uma realização da invenção;
- A Figura 3 é um fluxograma para a entrega
de uma tarefa a uma thread para desempenho, em uma realização
da invenção;
A Figura 4 é um fluxograma para monitorar
a performance de uma tarefa em uma realização da invenção.
REALIZAÇÕES PREFERIDAS DA PRESENTE INVENÇÃO [018] Nas realizações da invenção, se uma tarefa é executada em tempo extra, ela pode ser descoberta por meio da adição de uma função para monitorar a situação de performance de tarefa nas funções de gerenciamento de um thread pool, no dispositivo de computação baseado em programação orientada a objetos. Quando uma tarefa está em tempo extra, uma nova thread é criada para desempenhar as
Petição 870190119756, de 18/11/2019, pág. 20/50
9/29 tarefas referentes ao tempo extra de execução de thread, melhorando assim a reprodutibilidade e a eficiência de performance da tarefa do thread pool. Os exemplos da presente invenção serão descritos em detalhes, abaixo, com referência aos respectivos desenhos.
[019] Geralmente, um thread pool inclui, principalmente, os seguintes componentes:
um gerenciador de thread pool (ThreadPoolManager), que é utilizado para criar e pesquisar thread pools, ou seja, mantém todos os thread pools em um programa de aplicativo;
uma classe de implementação de thread pool (ThreadPoolImpl), que é utilizada para manter um thread pool, incluindo criação, destruição, monitoramento de execução, controle de armazenamento excessivo de mensagem e alinhamento de tarefa de cada thread de processo, e assim por diante;
uma thread de processo (ProcessThread): um objeto de thread em um thread pool, que é utilizada para desempenhar tarefas de um usuário, e cujo número é determinado por meio da variável do tamanho do thread pool (poolSize);
uma lista de tarefas (taskList) , que é utilizada para armazenar tarefas em espera e para prover um mecanismo de cache;
uma tarefa de thread (PoolTask), cada tarefa colocada no thread pool para performance deve ser herdada da classe, assim a thread de processo programa a performance da tarefa;
uma variável para controle de armazenamento excessivo de tarefas (maxWaitingTask): que é utilizada para controlar o armazenamento excessivo de tarefas de thread para evitar a exceção do sistema que resulta do enorme
Petição 870190119756, de 18/11/2019, pág. 21/50
10/29 armazenamento excessivo de tarefas.
[020] O thread pool na invenção também inclui estes componentes, mas alguns dos componentes são diferentes daqueles em um thread pool convencional. Por exemplo, o gerenciador de thread pool nos exemplos da presente invenção somente é utilizado para criar e consultar thread pools, ou seja, para manter todos os thread pools nos programas de aplicativos, e não utilizados para operar threads de processo; é possível que exista uma pluralidade de listas de tarefas nos exemplos da presente invenção, cada thread corresponde a uma lista de tarefas e diferentes threads correspondem a diferentes listas de tarefas.
[021] A thread pool na invenção ainda conta com uma função para monitorar a situação de performance da tarefa, essa função de monitoramento pode ser implementada por meio dos seguintes componentes:
uma tarefa regular de monitoramento de tarefas (por exemplo, MonitorTask): que é utilizada para verificar a situação de execução da tarefa de um thread pool, bem como para controlar o processamento para reprodutibilidade da thread e exceção de operação de tarefa;
um grupo de variável de controle de execução de thread (runThdIdx): que é utilizado para controlar a execução da thread e para garantir uma correspondência uma para uma entre as threads e as listas de tarefas.
[022] O thread pool acima provê uma nova tarefa de interface externa uniforme (newTask), por meio do agendamento, dos quais vários tipos de aplicativos colocam as tarefas em espera no thread pool, e no qual as regras de atribuição de tarefas, por meio das quais cada thread pode
Petição 870190119756, de 18/11/2019, pág. 22/50
11/29 ser colocada em uma lista de tarefas, são providas.
[023] A etapa de tarefas de processamento com o thread pool acima inclui os seguintes fluxos principais:
[024] um fluxo de atribuição de tarefa: no qual as tarefas em espera são atribuídas a listas de tarefas, e a atribuição de tarefas é concluída por meio do agendamento da interface newTask. A newTask pode determinar uma lista de tarefas utilizadas para efetuar o cache da tarefa, de acordo com um ID de tarefa, atribuindo assim tarefas em espera para as respectivas listas de tarefas; a newTask também pode atribuir, uniformemente, tarefas em espera para listas de tarefas não de acordo com o ID de tarefa. Consequentemente, a newTask pode ainda decidir se aceita uma tarefa, de acordo com o número de tarefas atualmente em cache, em uma lista de tarefas de objeto, evitando assim o armazenamento excessivo de tarefas;
um fluxo de performance de tarefa: a thread de processo retira a tarefa classificada como a primeira, a partir da respectiva lista de tarefas a desempenhar, ou seja, entrega as tarefas na lista de tarefas para as respectivas threads de processo para performance, de acordo com o mecanismo first in first out, e aguarda até que não exista tarefa;
um fluxo de monitoramento de tarefas: tarefa de monitoramento regular de tarefas (checkTask)(instância MonitorTask) verifica (ou avalia), regularmente, todas as threads no thread pool, verifica a duração atual de execução da thread para desempenhar uma tarefa e considera se uma thread cai, se a duração atual de execução de uma thread para desempenhar a tarefa excede um determinado valor de limite,
Petição 870190119756, de 18/11/2019, pág. 23/50
12/29 cujo caso a informação da tarefa de tempo extra é registrada e uma nova thread é criada para processar as tarefas na lista de tarefas respectivas, para assim evitar a exceção do sistema resultante do armazenamento excessivo enorme e duradouro de tarefas, percebendo assim funções de monitoramento, tolerância à falha e reprodutibilidade de thread do thread pool.
[025] A estrutura do thread pool e o processo de implementação do método principal para o thread pool, nos exemplos da invenção, que inclui os processos de implementação da atribuição de tarefa, performance de tarefa e métodos de monitoramento de tarefa, serão descritos em detalhes a seguir, com referência à Figura 1, Figura 2, Figura 3 e Figura 4.
[026] Em referência à Figura 1, ela ilustra a estrutura interna do thread pool, em um exemplo da presente invenção. Conforme ilustrado na figura, os elementos no thread pool incluem, principalmente:
1. parâmetros básicos, incluindo:
thdGroup: grupo de thread;
poolName: nome do pool;
poolSize: tamanho do pool, ou seja, o número de threads no pool;
checkTask: tarefa de monitoramento, instância
MnitorTask;
maxWaitingTask: o número máximo de tarefas em espera permitido, por meio de uma única tarefa, que é utilizada para controlar o armazenamento excessivo de tarefas;
2. parâmetros de performance, incluindo:
Petição 870190119756, de 18/11/2019, pág. 24/50
13/29 currentThdIdx: um identificador de thread atual, indicando o número de threads criadas, que incluem o número de threads reproduzidas; neste exemplo, os identificadores de thread aumentam progressivamente, de acordo com a sequência de criação de thread, começando a partir de 0;
deadThdNum: número de threads que caíram no thread pool;
thdLockObj: objetos de travamento de thread, utilizados quando as variáveis são sincronizadas;
checkCount: organização interna, utilizada para registrar o número de contagem de detecção de cada thread, bem como uma thread é considerada por ter caído e a reprodução da thread é necessária se o número de contagem de detecção da thread excede um valor determinado; os elementos na organização são registrados como checkCount[i], que indica o valor de contagem de detecção da thread com um identificador de i;
addTaskCount: número total de tarefas recebidas pelo thread pool.
3. PoolTask: uma classe de tarefa de thread, que deve ser herdada por todas as tarefas colocadas no thread pool para processamento, os métodos principais incluindo process(), getTaskNumber(), getTaskId();
4. ProcessThread: uma classe de thread, incluindo duas variáveis básicas, tid e thdIdx, onde tid (cujo valor é de 0 até o poolSize-1) é o índice de uma thread no thread pool, por meio do qual a thread obtém tarefas em espera a partir de uma respectiva lista de tarefas (ou seja, a lista de tarefas com um valor de índice de lista de tid) e thdIdx (cujo valor varia de 0 a currentThdIdx) é o identificador
Petição 870190119756, de 18/11/2019, pág. 25/50
14/29 único de uma thread e também pode indicar a posição da thread na sequência de threads criadas no thread pool; o método de processo para a tarefa é desempenhado quando a thread é executada;
5. taskList: uma organização de lista de tarefas de thread pool, onde cada thread corresponde a uma lista de tarefas, cada lista de tarefas é, instância LinkedList, cada tarefa na lista de tarefas deve ser herdada da classe PoolTask e é utilizado um mecanismo first in first out; cada lista de tarefas tem seu próprio valor de índice, e o valor de índice de cada lista de tarefas é único em um thread pool;
6. currentTask: uma variável de organização de PoolTask, utilizada para armazenar, temporariamente, a informação de atributo da tarefa sendo atualmente desempenhada pela thread; assim a informação de atributo da tarefa atual em execução, dita como nome da tarefa, ID da tarefa, etc., é obtida quando a tarefa é executada por tempo extra; os elementos na organização são registrados como currentTask[i], no qual é registrada a informação relativa da tarefa atualmente realizada pela thread, com um identificador de i ;
7. runThdIdx: uma organização interna, utilizada para armazenar as relações respectivas entre os valores de índice das listas de tarefas de thread e os identificadores de thread, no thread pool, onde o índice da lista de tarefas é compatível com, inicialmente, o identificador de tarefa, por exemplo, runThdIdx[2]=2 indica que a thread de performance de tarefa para a lista de tarefas com um valor de índice de 2 (ou seja, taskList[2]) é a thread cuja thdIdx é 2, e quando uma determinada tarefa está em tempo extra, o
Petição 870190119756, de 18/11/2019, pág. 26/50
15/29 valor runThdIdx respectivo será alterado;
8. newTask: um método de acesso de suporte por meio do qual o aplicativo de nível superior coloca as tarefas em espera em um thread pool, e o qual é responsável por atribuir tarefas a listas de tarefas específicas;
9. MonitorTask: uma classe de monitoramento de thread pool, que herda TimerTask e é utilizada para monitorar se a tarefa em execução de cada thread está em tempo extra, e considera que a thread tem uma queda quando está em tempo extra e, em seguida, cria uma nova thread para desempenhar as tarefas na lista de tarefas respectiva, percebendo assim a função reprodutível de thread.
[027] Com referência à Figura 2, ela é um fluxograma do método newTask, no exemplo da invenção. O método é que um aplicativo de nível superior acessa a entrada de um thread pool e, simultaneamente, conclui a função de atribuição de tarefa. Os parâmetros de entrada incluem tarefa de instância de objeto que herda a classe PoolTask e tarefa de instância de objeto que herda o método getTaskId() da classe PoolTask. As etapas principais do fluxograma estão descritas a seguir.
[028] A etapa 201, agendamento do método da tarefa getTaskId() e atribuição do valor de retorno para uma variável temporária de id. Por meio desta etapa, são providos os parâmetros necessários para determinar, posteriormente, a regra de atribuição de tarefa e, de modo adicional, para o processo de atribuição de tarefa.
[029] O método getTaskId() na classe PoolTask é definido, por padrão, para retornar a -1. Neste exemplo, a classe de tarefa herdada a partir do PoolTask pode cobrir o
Petição 870190119756, de 18/11/2019, pág. 27/50
16/29 método, cujo caso id é o valor padrão de retorno a -1 para o método getTaskId() ou para não cobrir o método, cujo caso o valor id é o Id de uma tarefa em espera obtida pelo método getTaskId().
[030] A etapa 202, verificar se id é maior que 0 e, em caso positivo, avançar até a etapa 203; em caso negativo, avançar até a etapa 204. As regras de atribuição de tarefa são determinadas pela etapa.
[031] Os valores de id devolvidos pelo método getTaskId() têm um relação pertinente com a regra de atribuição de tarefa. A regra de atribuição de tarefa necessária para o uso é determinada pelo valor de id, de modo que o método newTask atribui tarefas de acordo com o valor de id. Diferentes faixas de variação de valor de id (id>0 ou id<=0) se referem a diferentes regras de atribuição.
[032] A etapa 203, quando id>0, realiza a operação de módulo em id e no poolSize, bem como atribuindo seu valor de resultado para a variável temporária de seq (cujo valor indica o valor de índice da lista de tarefas de objeto) para determinar a lista de tarefas de objeto.
[033] A etapa 204, quando id<=0, realiza a operação de módulo em addTaskCount e poolSize, e atribuindo seu valor de resultado para a variável temporária de seq (cujo valor indica o valor índice da lista de tarefas de objeto) para determinar a lista de tarefas de objeto.
[034] A etapa 205, verificando se o número de tarefas na lista de tarefas com um valor de índice de seq é maior que o número máximo permitido de tarefas em espera maxWaitingTask, se é menor que maxWaitingTask, então avançar até a etapa 206; ou ainda recusando-se a receber a tarefa e
Petição 870190119756, de 18/11/2019, pág. 28/50
17/29 finalizando o fluxograma por derrubar a exceção.
[035] Por meio desta etapa, o número de tarefas em espera na lista de tarefas pode ser controlado dentro de uma quantidade determinada, evitando assim o armazenamento excessivo de tarefas que pode influenciar a eficiência de processamento do servidor de aplicativos.
[036] A etapa 206, adição de tarefas a serem atribuídas a uma lista de tarefas com um valor de índice de seq.
[037] A etapa 207, despertar a lista de tarefas com o valor de índice de seq.
[038] A etapa 208, adicionar valor de unidade 1 para o número total de tarefas addTaskCount recebidas por meio do thread pool. Em que, o valor de unidade pode ser 1.
[039] É possível observar, a partir do fluxograma ilustrado na Figura 2, tarefas que podem ser uniformemente atribuídas a cada lista de tarefas, usando o valor de resultado da operação de módulo de addTaskCount e poolSize como valor de índica da lista de tarefas de objeto e atribuindo tarefas à lista de tarefas respectiva ao valor índice. Quando o valor de resultado da operação de módulo em id (Id de tarefa) e poolSize é utilizado como valor de índice da lista de tarefas de objeto, bem como as tarefas são atribuídas à lista respectiva para o valor de índice, a atribuição de tarefa é relativa ao Id de tarefa e as tarefas com o mesmo Id de tarefa serão atribuídas à mesma lista de tarefas e processadas pela mesma thread. Portanto, um aplicativo pode controlar a sequência sucessiva para a performance da tarefa estabelecendo o Id de tarefa, por exemplo, um programa de aplicativo pode configurar as tarefas
Petição 870190119756, de 18/11/2019, pág. 29/50
18/29 a serem desempenhadas, sucessivamente, com o mesmo Id, e colocar as tarefas em uma lista de tarefas, de acordo com a sequência sucessiva para performance, bem como controlar a sequência sucessiva para desempenhar as tarefas, de acordo com o mecanismo first in first out.
[040] Em relação ao fluxograma ilustrado na Figura 2, deve ser destacado que o método para determinar o valor de índice do índice de tarefa-alvo não está limitado ao algoritmo acima e para os técnicos no assunto, é fácil conceber outros algoritmos alternativos. Ademais, se a faixa de variação de valor de id (id>0 ou id< = 0) devolvida pelo método getTaskId() é previsível, a etapa de verificação da faixa de variação de valor de id pode ser pulada, bem como a regra de atribuição de tarefa referente à faixa de variação de valor de id pode ser diretamente utilizada para atribuir tarefas a listas de tarefas.
[041] Com referência à Figura 3, ela é o fluxograma do método de execução da classe ProcessThread no exemplo da invenção. Todas as threads no thread pool são instâncias de classe ProcessThread e o método de execução é uma operação implementada por uma thread, bem como o método total é um processo de verificação circular e desempenho de tarefa, incluindo, principalmente, as seguintes etapas:
[042] A etapa 301, verificando se o identificador de thread se refere ao valor de índice de uma lista de tarefas com um valor de tid em runThdIdx é compatível com thdIdx (o valor thdIdx é o identificador da thread atual). Caso negativo, é indicado que a relação pertinente entre o identificador de thread atual e o valor de índice da lista de tarefas atuais não é compatível com a
Petição 870190119756, de 18/11/2019, pág. 30/50
19/29 relação pertinente registrada em runThdIdx e, em seguida, avança até a etapa 302; em caso positivo, é indicado que a relação pertinente entre a identificação da thread atual e o valor de índice da tarefa atual é compatível com a relação pertinente registrada em runThdIdx, bem como avança até a etapa 303.
[043] Onde, tid e thdIdx são variáveis básicas da classe ProcessThread, o valor tid indica o valor de índice da lista de tarefas atuais e o valor de thdIdx indica o identificador da thread atual; runThdIdx é uma organização interna, que armazena a relação pertinente entre o valor de índice da lista de tarefas e o identificador de thread em um thread pool.
[044] A etapa 302, que subtrai o número de threads que apresentam uma queda deadThdNum pelo valor de unidade 1. Onde o valor de unidade pode ser 1. A operação precisa utilizar uma variável de thdLockObj para sincronização e, posteriormente, que execute os términos das threads.
[045] A etapa 303, que atribui nula (tarefa=nula) à variável temporária da tarefa para evitar que o valor de tarefa seja influenciado pelo valor circular do último tempo.
[046] A etapa 304, que atribui 0 a checkCount[tid] da organização checkCount, ou seja, apagando o valor checkCount (valor de contagem de detecção) da thread referente à lista de tarefas com um valor de índice de tid, para indicar que a thread referente ao valor de índice da lista de tarefas está em execução.
[047] A etapa 305, que verifica se a lista de
Petição 870190119756, de 18/11/2019, pág. 31/50
20/29 tarefas com um valor de índice de tid (taskList[tid]) é nula e, em caso positivo, avançando até a operação 306, ou ainda, avançando até a operação 307.
[048] A etapa 306, que agenda o método wait() do objeto taskList[id] para fazer com que a thread atual permaneça na condição de espera, até que a thread seja despertada por outras threads por meio do agendamento do método notify() do objeto taskList[tid] (por exemplo, a etapa 207 para newTask) e avançando até a etapa 305, depois de despertada a thread.
[049] A etapa 307, que verifica se o tamanho de taskList[tid] é maior que 0; em caso positivo, avança até a etapa 308; ou em caso negativo, avançando até a etapa 310.
[050] A etapa 308, que considera a primeira tarefa proveniente de taskList[tid] e atribuindo a ela a variável de tarefa.
[051] A etapa 309, que atribui a tarefa a currentTask[tid] para registrar a informação de atributo das tarefas sendo atualmente realizadas pela thread. A etapa é opcional.
[052] A etapa 310, que verifica se a variável temporária das tarefas é nula, caso negativo, avançando até a etapa 311 ou ainda avançando até a etapa 301 e iniciando a próxima circulação.
[053] A etapa 311, que agenda o método process() da instância de objeto da tarefa para desempenhar a tarefa e, em seguida, avançando até a etapa 301 para iniciar a próxima circulação.
[054] Cada thread avalia e desempenha tarefas circularmente, de acordo com o fluxograma ilustrado na Figura
Petição 870190119756, de 18/11/2019, pág. 32/50
21/29
3, entregando assim tarefas em uma fila de tarefas para a thread respectiva à lista de tarefas para performance. A thread é devolvida ao thread pool quando todas as tarefas na lista de tarefas foram completamente desempenhadas. A etapa 301 da etapa de avaliação, no fluxo acima, é a etapa principal para avaliar se a thread continua em execução e se ela garante que as tarefas sejam realizadas somente quando a relação pertinente entre a thread atual e a lista de tarefas atuais é compatível com a relação pertinente registrada em runThdIdx, garantindo assim a relação uma para uma pertinente entre as threads e as listas de tarefas. Ademais, uma vez que ela deve estabelecer uma relação pertinente entre as threads reprodutíveis e as listas de tarefas pertinentes depois que as threads são reproduzidas, desempenhando assim as tarefas nas listas de tarefas pertinentes, com o uso das threads reprodutíveis, é garantido, em um determinado grau, que as tarefas que devem ser desempenhadas pela thread, cuja execução de tarefa está em tempo extra, podem ser desempenhadas por threads reprodutíveis e, em seguida, normalmente finalizadas.
[055] Com referência à Figura 4, ela ilustra o fluxo de monitoramento de MonitorTask no exemplo da invenção. O timer task checkTask no thread pool é uma instância da classe MonitorTask, que é utilizada para monitorar todas as threads no thread pool, assim a reprodução da thread é percebida quando a tarefa está em tempo extra de execução. O fluxo em cada período de monitoramento inclui, principalmente, as seguintes etapas:
Etapa 401, que atribui 0 à variável temporária de i.
[056] A Etapa 402, que verifica se i é menor
Petição 870190119756, de 18/11/2019, pág. 33/50
22/29 que poolSize. Caso positivo, é indicado que nem todas as threads no thread pool são avaliadas, bem como avança até a etapa 403; ou em caso negativo, é indicado que todas as threads no thread pool foram avaliadas e o fluxo atual de monitoramento termina.
[057] A etapa 403, que verifica se a lista de tarefas com um índice de i taskList[i] é nula. Em caso positivo, é indicado que a thread não tem tarefa em espera e nenhuma limitação do tempo de execução é efetuada para a tarefa atualmente processada, bem como avança até a etapa 412; ou ainda, avança até a etapa 404.
[058] A Etapa 404, que adiciona valor de unidade 1 ao valor de contagem de detecção checkCount[i] da thread, com um identificador de i. Onde, o valor de unidade pode ser 1.
[059] A Etapa 405, que verifica se checkCount[i] é maior que um limiar predeterminado. Caso positivo (por exemplo, checkCount[i]>5), é indicado que o tempo de execução atual da tarefa excede os períodos de detecção de um número dado, ou seja, a tarefa está em tempo extra de execução, bem como avança até a etapa 406; ou ainda (por exemplo, checkCount[i]<5), avança até a etapa 412.
[060] A etapa 406, que retira a informação de atributo de tarefa registrada na currentTask[i] (currentTask[i] registra as informações de atributo da tarefa, que inclui o nome da tarefa e o Id da tarefa e assim por diante, de modo atual, executado pela thread com um identificador de i) e registrando isso em seus logs como base para a análise subsequente sobre razões para tempo extra de execução ou investigação de problemas adicionais. A etapa é
Petição 870190119756, de 18/11/2019, pág. 34/50
23/29 opcional.
[061] A Etapa 407, que adiciona 1 ao número de threads que apresentam queda deadThdNum. A operação deve ser sincronizada com a variável de thdLockObj e, em seguida, avançar até parte do processamento de reprodução de thread.
[062] A Etapa 408, que adiciona 1 ao identificador de thread currentThdIdx, e utilizando o valor obtido como o identificador da thread recentemente criada. Onde, currentThdIdx indica o número de threads criadas, ou seja, o identificador de thread com o valor máximo, com base no qual o identificador de thread recentemente criado aumenta progressivamente.
[063] A Etapa 409, que atribui currentThdIdx a runThdIdx[i], ou seja, estabelecendo uma relação respectiva entre a lista de tarefas pertinente à thread com um identificador de i e o identificador da thread recentemente criada para substituir a relação respectiva entre a lista de tarefas e a thread com identificador de i, para indicar que as tarefas na lista de tarefas taskList[i] devem ser processadas por meio da thread reproduzida currentThdIdx.
[064] A Etapa 410, que cria uma nova thread,
para a qual tid é i e o identificador da thread é
currentThdIdx.
[065] A Etapa 411, que inicia a nova thread.
[066] A Etapa 412, que adiciona 1 a i e, em
seguida, voltando à etapa 402 para começar a detecção de
condição de execução da próxima thread.
[067] É possível observar a partir da combinação da Figura 3 e da Figura 4, que o valor de contagem de detecção referente a uma thread pode ser utilizado para
Petição 870190119756, de 18/11/2019, pág. 35/50
24/29 caracterizar a duração para a performance de uma tarefa atual pela thread (ou seja, o tempo de execução da tarefa) apagando o valor de contagem de detecção checkCount referente à thread antes da thread começar a desempenhar uma tarefa recebida e aumentando, progressivamente, o valor de contagem de detecção checkCount referente a períodos de monitoramento durante a thread e, assim, se a duração para desempenhar a tarefa atual pela thread (ou seja, o tempo de execução da tarefa) está em tempo extra pode ser verificado por meio do valor de contagem de detecção da thread. É possível observar a partir do fluxo ilustrado na Figura 4, que o timer task checkTask avalia as threads no thread pool, periodicamente, e a duração de execução de uma determinada thread é considerada como sendo tempo extra quando é detectado que a thread não terminou a performance da tarefa atual, quando uma dada duração (duração de período de monitoramento x um limiar) excede o limite, bem como ainda a thread é considerada por contar com queda, cujo caso, uma nova thread é criada e a respectiva relação entre a lista de tarefas referente à thread é considerada por ter apresentado queda, bem como a thread recentemente criada é estabelecida de modo que a thread recentemente criada desempenha as tarefas na lista de tarefas. Geralmente, uma vez que o tempo para desempenhar uma tarefa pela thread é curto, é provável que uma exceção surja se o tempo utilizado para desempenhar a tarefa pela thread exceder uma determinação duração. Ademais, um tempo muito longo utilizado para desempenhar a tarefa pela thread fará com que outras tarefas não sejam oportunamente desempenhadas, a velocidade para responder à solicitação do cliente será atrasada e um armazenamento excessivo enorme e duradouro de tarefas resulta
Petição 870190119756, de 18/11/2019, pág. 36/50
25/29 em exceção do sistema de um servidor de aplicativos, reduzindo assim a eficiência de execução do servidor de aplicativos. No exemplo, por meio do uso da thread recentemente criada para substituir a thread de tempo extra de execução para concluir as tarefas na respectiva lista de tarefas, é reduzido o tempo para desempenhar tarefas na respectiva lista de tarefas, e em determinado grau, é evitado um armazenamento excessivo enorme e duradouro e a eficiência de execução dos servidores de aplicativos é melhorada. Ademais, por meio da adição do mecanismo de monitoramento de tarefa no thread pool, nos exemplos da invenção, a thread de tempo extra de execução pode ser descoberta no tempo e uma nova thread pode ser criada no tempo para substituir a thread de tempo extra de execução para desempenhar as tarefas, provendo assim um mecanismo de reprodução de thread e um mecanismo de tolerância à falha.
[068] Em relação ao fluxo ilustrado na Figura 4, deve ser destacado que: ao avaliar todas as threads no thread pool, o fluxo pode ser semelhante ao fluxo acima, que começa a avaliar na thread com o menor identificador, o fluxo começa a avaliar na thread com o maior identificador ou o fluxo avalia as threads em outras sequências.
[069] Os diferentes fluxos acima podem ser obtidos por meio de códigos de software, respectivamente. Diferentes fluxos podem ser desempenhados por meio de diferentes módulos. Por exemplo, o módulo respectivo ao fluxo de atribuição de tarefa, ilustrado na Figura 2, é um módulo de atribuição de tarefa, o módulo respectivo ao fluxo de desempenho de tarefa, ilustrado na Figura 3 é um módulo de desempenho de tarefa, bem como o módulo respectivo ao fluxo
Petição 870190119756, de 18/11/2019, pág. 37/50
26/29 de monitoramento de tarefa, ilustrado na Figura 4, é um módulo de monitoramento de tarefa. Onde o módulo de atribuição de tarefa é percebido por meio de uma classe de tarefa de thread PoolTask, o módulo de desempenho de tarefa é percebido por uma classe de thread ProcessThread e o módulo de monitoramento de tarefa é percebido por meio de uma classe de monitoramento de thread pool MonitorTask. O sistema de gerenciamento de thread pool, no exemplo da invenção, é construído por meio dos módulos de código acima, combinado ao thread pool ilustrado na Figura 1.
[070] O sistema para gerenciar o thread pool, no exemplo da invenção, compreende um thread pool e um módulo de função. Onde:
o thread pool inclui listas de tarefas (listas de tarefas estão em uma correspondência uma para uma com threads no thread pool) e uma organização runThdIdx (equivalente a um respectivo módulo de armazenamento de relação, que é utilizado para armazenar relações entre as listas de tarefas e as threads, as relações correspondentes são relações correspondentes entre identificadores de threads e os valores de índice de listas de tarefas);
o módulo de função inclui:
um módulo de desempenho de tarefa, que está configurado para utilizar todas as threads para desempenhar as tarefas respectivas; e um módulo de monitoramento de tarefa, que está configurado para avaliar, regularmente, todas as threads no thread pool para monitorar a duração de execução para desempenhar uma tarefa atual pela thread; e criar uma nova thread quando é determinado que uma thread é executada por
Petição 870190119756, de 18/11/2019, pág. 38/50
27/29 tempo extra, de acordo com as durações de execução monitoradas, e instruído o módulo de desempenho de tarefa para utilizar a thread recentemente criada para desempenhar as tarefas que devem ser desempenhadas pela thread que é executada em tempo extra.
[071] O sistema pode compreender ainda um módulo de atribuição de tarefa, que está configurado para atribuir tarefas em espera para as listas de tarefas no thread pool.
[072] O módulo de atribuição de tarefa pode atribuir tarefas na seguinte abordagem: obter identificadores de tarefas em espera e realizar a operação de módulo nos identificadores obtidos das tarefas e o número das threads no thread pool, ou realizar a operação de módulo no número total de tarefas atualmente atribuídas no thread pool e o número de threads no thread pool e, em seguida, atribuir as tarefas em espera à lista de tarefas cujo valor de índice é o valor de resultado da operação de módulo.
[073] Os processos de performance dos módulos de função acima e as respectivas funções foram descritos nos fluxogramas de processos anteriores e, portanto, não serão ora descritos para evitar a repetição.
[074] O que requer explicação é que, embora todos os exemplos acima sejam descritos com base na consideração de que as threads no thread pool estão em uma correspondência de uma para uma com as listas de tarefas, a invenção não é limitante à dita relação de correspondência entre as threads e as listas de tarefas. Por exemplo, uma pluralidade de threads pode referir-se à mesma lista de tarefas, utilizando assim uma pluralidade de threads para
Petição 870190119756, de 18/11/2019, pág. 39/50
28/29 desempenhar as tarefas na lista de tarefas.
[075] Em conclusão, a tecnologia para gerenciar um thread pool, provida pelos exemplos da invenção, não apenas resolve o problema de custo e o problema de falta de recursos em um período de vida da thread, mas também melhora a eficiência funcional dos servidores e, ao mesmo tempo, conta com uma função de monitoramento e tolerância à falha, percebe a reprodução de thread e o mecanismo de atribuição de tarefa opcional, bem como pode ajudar um aplicativo a localizar, adequadamente, a tarefa de execução excepcionalmente, melhorando assim a performance e a estabilidade do servidor de aplicativos.
[076] Obviamente, os técnicos no assunto podem efetuar várias modificações e variações, sem desvio do escopo das reivindicações anexas. Assim, se as ditas modificações e variações da invenção recaem dentro do escopo das reivindicações da invenção e suas tecnologias equivalentes, a invenção também destina-se a incluir as modificações e variações.
APLICABILIDADE INDUSTRIAL [077] Na presente invenção, se existe uma thread de tempo extra de execução, ela é confirmada por meio do monitoramento da duração da execução para desempenhar uma tarefa atual, por meio de cada thread, durante o processo das tarefas de desempenho de thread e, caso positivo, a nova thread é criada e utilizada para desempenhar as tarefas que devem ser desempenhadas por meio do tempo extra de execução da thread, reduzindo assim o tempo para desempenhar as tarefas nas listas de tarefas respectivas, bem como em um determinado grau, evitando um armazenamento excessivo enorme
Petição 870190119756, de 18/11/2019, pág. 40/50
29/29 e duradouro de tarefas e, portanto, melhorando a eficiência de execução de um servidor de aplicativos. Ademais, por meio da adição de um mecanismo de monitoramento de tarefa no thread pool, nas realizações da invenção, o tempo extra de execução de thread pode ser descoberto em tempo, e as novas threads podem ser criadas em tempo para substituir o tempo extra de execução de thread para desempenhar tarefas, provendo assim um mecanismo de reprodução de thread e um mecanismo de tolerância à falha para a tecnologia de thread pool.

Claims (7)

  1. REIVINDICAÇÕES
    1. MÉTODO PARA GERERENCIAR UM THREAD POOL, compreendendo:
    avaliação regularmente de cada thread, no thread pool, para monitorar uma duração de execução de cada thread para desempenhar uma tarefa atual; e quando é determinado, conforme as durações de execução monitoradas, que uma thread é executada por tempo extra, criando uma nova thread para desempenhar tarefas que devem ser desempenhadas pela thread que é executada por tempo extra, caracterizado por compreender ainda:
    estabelecer uma relação correspondente, uma a uma, entre os threads no thread pool e as listas de tarefas por meio de identificadores de threads e valores de índice das listas de tarefas;
    cada thread que desempenha tarefas em uma lista de tarefas correspondente;
    em que a etapa de cada thread que executa tarefas na lista de tarefas respectivas compreende: verificar (301) se um identificador de thread atual de um thread atual é igual a um identificador de thread correspondente a um valor de índice de uma lista de tarefas atual na relação respectiva e, em caso positivo, entregar tarefas na lista de tarefas atual ao thread atual de acordo com o mecanismo first in first out, e usar a thread atual para executar as tarefas recebidas; caso contrário, finalizar a execução de tarefas;
    antes da etapa de cada thread executando tarefas na lista de tarefas respectivas, o método compreende ainda: obter identificadores de tarefas a serem atribuídas e
    Petição 870190119756, de 18/11/2019, pág. 42/50
  2. 2/5 executar (203) operação de módulo no número de identificadores obtidos das tarefas e no número de threads no thread pool; atribuir as tarefas a serem atribuídas a uma lista de tarefas cujo valor de índice é um valor resultante da operação de módulo; ou antes da etapa de cada thread que executa tarefas na lista de tarefas correspondente, o método compreender ainda: executar (204) a operação de módulo em um número total de tarefas já atribuídas no thread pool e o número de threads no thread pool; e atribuir as tarefas a serem atribuídas a uma lista de tarefas cujo valor de índice é o valor
    resultante da operação de módulo. com a reivindicação 1, 2. MÉTODO, de acordo caracterizado por, antes da etapa da thread recentemente criada, que desempenha tarefas que devem ser desempenhadas por meio da
    thread que é executada em tempo extra, o método compreende ainda: remoção de um valor de contagem de detecção referente à thread recentemente criada;
    a etapa de avaliar regularmente cada thread compreende: em cada período, avaliação de todas as threads, no thread pool, uma a uma, e adição (404) de valor de unidade 1 para valor de contagem de detecção da thread que foi avaliada, que verifica (405) se o valor de contagem de detecção da thread excede um limiar e, caso positivo, que considera que a thread está em execução em tempo extra; ou
    ainda, que considera que a thread não está em execução em tempo extra. 3. MÉTODO, de acordo com qualquer uma das reivindicações 1 ou 2, caracterizado por:
    Petição 870190119756, de 18/11/2019, pág. 43/50
  3. 3/5 as tarefas que devem ser realizadas pela thread, que é executada por tempo extra, são tarefas na lista de tarefas respectiva à thread, que é executada em tempo extra.
  4. 4. MÉTODO, de acordo com a reivindicação 3, caracterizado por, antes da etapa da thread recentemente criada, que desempenha as tarefas que devem ser desempenhadas por meio da thread que é executada por tempo extra, o método compreender ainda: estabelecer uma relação correspondente entre a lista de tarefas correspondente à thread, que é executada em tempo extra e a thread recentemente criada, bem como a substituição de uma relação correspondente entre a lista de tarefas e a thread, que é executada em tempo extra com a relação correspondente recentemente estabelecida.
  5. 5. MÉTODO, de acordo com a reivindicação 1, caracterizado por, antes da etapa de atribuição de tarefas a serem atribuídas à lista de tarefas cujo valor de índice é o valor de resultado da operação de módulo, o método compreender ainda: verificar se o número de tarefas na lista de tarefas cujo valor de índice é o valor de resultado da operação de módulo é menor que o número máximo de tarefas em espera permitidas e, caso positivo, avançar à etapa de atribuição de tarefas a serem atribuídas a uma lista de tarefas cujo valor de índice é o valor de resultado da operação de módulo.
  6. 6. SISTEMA PARA GERENCIAR UM THREAD POOL, compreendendo:
    uma lista de tarefas, que está configurada para armazenar tarefas a serem processadas, um módulo de desempenho de tarefa, que está
    Petição 870190119756, de 18/11/2019, pág. 44/50
    4/5 configurado para utilizar cada thread para desempenhar as respectivas threads; e um módulo de monitoramento de tarefa, que está configurado para avaliar, regularmente, cada thread no thread pool, para monitorar uma duração de execução de cada thread para desempenhar uma tarefa atual; e criar uma nova thread quando ela é determinada, de acordo com as durações de execução monitoradas que uma thread é executada por tempo extra, e instruir o módulo de desempenho de tarefa para utilizar a thread recentemente criada para desempenhar tarefas que devem ser desempenhadas por meio da thread que é executada em tempo extra, caracterizado por:
    estabelecer uma relação correspondente um a um entre os threads no thread pool e as listas de tarefas por meio de identificadores de threads e valores de índice das listas de tarefas;
    o módulo de execução de tarefas ser configurado ainda para usar cada thread para executar tarefas em uma lista de tarefas respectivas; e verificar se um identificador de thread atual de um thread atual é igual a um identificador de thread correspondente a um valor de índice de uma lista de tarefas atual na relação correspondente e, em caso positivo, entregar tarefas na lista de tarefas atual à thread atual, de acordo com o mecanismo first in first out, e usar a thread atual para executar tarefas recebidas; caso contrário, finalizar a execução de tarefas;
    o sistema compreende ainda:
    um módulo de atribuição de tarefas, configurado
    Petição 870190119756, de 18/11/2019, pág. 45/50
    5/5 para obter identificadores de tarefas a serem atribuídas, e executar operação de módulo no número de identificadores obtidos das tarefas e do número de threads no thread pool, e atribuir as tarefas a serem atribuídas a uma lista de tarefas cujo valor de índice é um valor resultante da operação do módulo; ou executar a operação de módulo em um número total de tarefas já atribuídas no thread pool e o número de threads no thread pool, e atribuir as tarefas a serem atribuídas a uma lista de tarefas cujo valor de índice seja o valor resultante da operação de módulo.
  7. 7. SISTEMA, de acordo com a reivindicação 6, caracterizado pelo sistema compreender ainda:
    um módulo de armazenamento de relação respectiva, que está configurado para armazenar a relação respectiva entre as listas de tarefas e as threads no thread pool;
    o módulo de monitoramento de tarefa que está configurado para instruir o módulo de desempenho de tarefa para utilizar a thread recentemente criada para desempenhar as tarefas na lista de tarefas referentes à thread que é executada em tempo extra.
BRPI1010168A 2009-06-30 2010-05-26 método para gerenciar um thread pool e sistema para gerenciar um thread pool BRPI1010168B1 (pt)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
CN2009101507455A CN101599027B (zh) 2009-06-30 2009-06-30 一种线程池管理方法及其系统
PCT/CN2010/073269 WO2010145429A1 (zh) 2009-06-30 2010-05-26 一种线程池管理方法及其系统

Publications (2)

Publication Number Publication Date
BRPI1010168A2 BRPI1010168A2 (pt) 2016-03-29
BRPI1010168B1 true BRPI1010168B1 (pt) 2020-05-05

Family

ID=41420482

Family Applications (1)

Application Number Title Priority Date Filing Date
BRPI1010168A BRPI1010168B1 (pt) 2009-06-30 2010-05-26 método para gerenciar um thread pool e sistema para gerenciar um thread pool

Country Status (4)

Country Link
EP (1) EP2434401A4 (pt)
CN (1) CN101599027B (pt)
BR (1) BRPI1010168B1 (pt)
WO (1) WO2010145429A1 (pt)

Families Citing this family (64)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101599027B (zh) * 2009-06-30 2013-02-13 中兴通讯股份有限公司 一种线程池管理方法及其系统
US8381216B2 (en) * 2010-03-05 2013-02-19 Microsoft Corporation Dynamic thread pool management
CN101958804B (zh) * 2010-09-20 2014-05-28 中兴通讯股份有限公司 提升告警处理效率的方法、服务器及系统
CN102467412B (zh) * 2010-11-16 2015-04-22 金蝶软件(中国)有限公司 一种处理操作请求的方法、装置及业务系统
CN102929709A (zh) * 2011-08-08 2013-02-13 阿里巴巴集团控股有限公司 任务流异常的处理方法及装置
CN102262564A (zh) * 2011-08-16 2011-11-30 天津市天祥世联网络科技有限公司 视频监控平台系统的线程池结构及实现方法
CN102360310B (zh) * 2011-09-28 2014-03-26 中国电子科技集团公司第二十八研究所 一种分布式系统环境下的多任务进程监视方法
CN103246548B (zh) * 2012-02-02 2016-08-03 迈普通信技术股份有限公司 一种容错保序的事件调度方法及装置
CN102629220A (zh) * 2012-03-08 2012-08-08 北京神州数码思特奇信息技术股份有限公司 一种动态任务分配管理方法
JP5479519B2 (ja) * 2012-03-30 2014-04-23 富士フイルム株式会社 画像処理装置、方法及びプログラム
CN102722417B (zh) * 2012-06-07 2015-04-15 腾讯科技(深圳)有限公司 一种扫描任务的分配方法和装置
CN102752136A (zh) * 2012-06-29 2012-10-24 广东东研网络科技有限公司 通信设备操作调度方法
CN103473138A (zh) * 2013-09-18 2013-12-25 柳州市博源环科科技有限公司 基于线程池的多任务队列调度方法
CN103473129B (zh) * 2013-09-18 2017-01-18 深圳前海大数金融服务有限公司 线程数目可伸缩的多任务队列调度系统及其实现方法
CN104636232B (zh) * 2013-11-06 2018-12-04 中国移动通信集团广东有限公司 一种分布式服务系统的性能监控装置和方法
CN104899093B (zh) * 2014-03-04 2018-06-05 华为技术有限公司 数据处理方法、装置和系统
CN103983955B (zh) * 2014-05-15 2017-05-17 中国电子科技集团公司第四十一研究所 一种收发组件测试中电源监控方法
US9400701B2 (en) 2014-07-07 2016-07-26 International Business Machines Corporation Technology for stall detection
CN104572262B (zh) * 2014-12-27 2018-09-04 北京奇虎科技有限公司 一种任务执行方法和装置
CN105843592A (zh) * 2015-01-12 2016-08-10 芋头科技(杭州)有限公司 一种在预设嵌入式系统中实现脚本操作的系统
CN105204960A (zh) * 2015-09-18 2015-12-30 浪潮集团有限公司 一种利用linux时间池定时异地备份数据库的方法
CN105550028B (zh) * 2015-12-25 2019-08-06 Tcl集团股份有限公司 一种基于缓存锁的多任务时序执行方法及系统
CN105677391A (zh) * 2015-12-30 2016-06-15 深圳联友科技有限公司 一种定时插件的实现方法及装置
CN105740326B (zh) * 2016-01-21 2021-01-15 腾讯科技(深圳)有限公司 浏览器的线程状态监测方法及装置
US20170262191A1 (en) 2016-03-08 2017-09-14 Netapp, Inc. Reducing write tail latency in storage systems
CN107291534A (zh) * 2016-04-13 2017-10-24 平安科技(深圳)有限公司 异步任务并发处理方法和系统
CN106385341B (zh) * 2016-08-31 2021-03-26 福建天晴数码有限公司 客户端监控线程的方法及其系统
CN106407088A (zh) * 2016-09-08 2017-02-15 努比亚技术有限公司 一种对多核cpu进行检测的方法和装置
CN106485141A (zh) * 2016-10-21 2017-03-08 天津海量信息技术股份有限公司 Java环境下异常业务线程检测与处理方法
JP6942458B2 (ja) * 2016-10-25 2021-09-29 キヤノン株式会社 プログラム、システム及び情報処理方法
JP6792409B2 (ja) 2016-10-25 2020-11-25 キヤノン株式会社 プログラム、システム及び情報処理方法
CN106802826B (zh) * 2016-12-23 2021-06-18 中国银联股份有限公司 一种基于线程池的业务处理方法及装置
CN106775984B (zh) * 2016-12-26 2020-01-21 锐捷网络股份有限公司 一种管理线程池的方法和装置
CN106909461A (zh) * 2017-02-21 2017-06-30 杭州天宽科技有限公司 一种单线程模拟多线程的方法
CN107133332B (zh) * 2017-05-11 2020-10-16 广州视源电子科技股份有限公司 一种查询任务的分配方法及装置
WO2019000233A1 (zh) * 2017-06-27 2019-01-03 华为技术有限公司 一种卡顿检测方法及装置
CN107741897A (zh) * 2017-09-11 2018-02-27 广州市百果园信息技术有限公司 应用程序流畅度检测方法、装置及智能终端
CN107704363B (zh) * 2017-09-28 2021-07-23 努比亚技术有限公司 冻屏监测方法、移动终端及计算机可读存储介质
CN107766137A (zh) * 2017-10-16 2018-03-06 北京京东尚科信息技术有限公司 一种任务处理方法和装置
CN107908493B (zh) * 2017-10-31 2021-05-21 努比亚技术有限公司 冻屏监测与解决方法、移动终端及计算机可读存储介质
CN110019339B (zh) * 2017-11-20 2021-11-30 北京京东尚科信息技术有限公司 一种数据查询方法和系统
CN109947554A (zh) * 2017-12-21 2019-06-28 江苏奥博洋信息技术有限公司 一种任务超时自动回收分配的方法
CN110096344A (zh) * 2018-01-29 2019-08-06 北京京东尚科信息技术有限公司 任务管理方法、系统、服务器集群和计算机可读介质
CN108345499B (zh) * 2018-02-01 2019-05-17 平安科技(深圳)有限公司 统一线程池处理方法、应用服务器及计算机可读存储介质
CN108710538B (zh) * 2018-05-14 2023-06-02 中国平安人寿保险股份有限公司 一种线程配置方法、计算机可读存储介质及终端设备
CN110213213B (zh) * 2018-05-30 2021-08-03 腾讯科技(深圳)有限公司 应用的定时任务处理方法及系统
CN108804320A (zh) * 2018-05-30 2018-11-13 平安普惠企业管理有限公司 自动化测试方法、装置、计算机设备及存储介质
CN109783210B (zh) * 2018-12-13 2023-10-20 平安科技(深圳)有限公司 多任务处理方法、装置、计算机设备及存储介质
CN109840149B (zh) * 2019-02-14 2021-07-30 百度在线网络技术(北京)有限公司 任务调度方法、装置、设备及存储介质
CN110502402B (zh) * 2019-08-28 2023-03-21 中国联合网络通信集团有限公司 消息处理方法、设备及终端设备
CN110532111B (zh) * 2019-08-29 2023-07-28 深圳前海环融联易信息科技服务有限公司 高并发请求异步处理方法、装置、计算机设备及存储介质
CN110688102B (zh) * 2019-09-29 2022-03-22 北京浪潮数据技术有限公司 捕获异步接口执行结果的方法、系统、装置及存储介质
CN111104209B (zh) * 2019-11-25 2023-07-11 华为技术有限公司 一种处理任务的方法及相关设备
CN111651865B (zh) * 2020-05-12 2023-03-17 北京华如科技股份有限公司 一种并行离散事件的事件集中发射式仿真执行方法及系统
CN111625332A (zh) * 2020-05-21 2020-09-04 杭州安恒信息技术股份有限公司 Java线程池拒绝策略执行方法、装置和计算机设备
CN111857987B (zh) * 2020-06-19 2023-03-24 苏州浪潮智能科技有限公司 一种基于icm的异常任务处理方法及装置
CN111813552B (zh) * 2020-07-16 2021-12-03 济南浪潮数据技术有限公司 一种基于多线程任务的调度执行方法、装置和介质
CN112015559A (zh) * 2020-09-03 2020-12-01 深圳虹川科技有限公司 基于http协议的异步实时数据更新系统及方法
CN112148493A (zh) * 2020-09-30 2020-12-29 武汉中科通达高新技术股份有限公司 一种流媒体任务管理方法及装置、数据服务器
CN112835704A (zh) * 2021-03-26 2021-05-25 中国工商银行股份有限公司 任务处理方法、线程池管理方法、装置和计算设备
CN113419871B (zh) * 2021-06-21 2023-01-31 Oppo广东移动通信有限公司 基于同步槽的对象处理方法及相关产品
CN113495782B (zh) * 2021-07-07 2024-02-02 上海映驰科技有限公司 实现确定性执行目标的任务调度方法、装置及电子设备
CN114691375B (zh) * 2022-06-02 2022-08-26 青岛展诚科技有限公司 基于并行算法的集成电路电阻抽取方法
CN117707743B (zh) * 2024-02-05 2024-05-14 天津凯发电气股份有限公司 一种智慧车站能源管控系统任务执行方法、装置及设备

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6535878B1 (en) * 1997-05-02 2003-03-18 Roxio, Inc. Method and system for providing on-line interactivity over a server-client network
US6377984B1 (en) * 1999-11-02 2002-04-23 Alta Vista Company Web crawler system using parallel queues for queing data sets having common address and concurrently downloading data associated with data set in each queue
US6898617B2 (en) * 1999-11-18 2005-05-24 International Business Machines Corporation Method, system and program products for managing thread pools of a computing environment to avoid deadlock situations by dynamically altering eligible thread pools
US7051330B1 (en) * 2000-11-21 2006-05-23 Microsoft Corporation Generic application server and method of operation therefor
US6892331B2 (en) * 2002-01-17 2005-05-10 International Business Machines Corporation Method and system for error detection in a managed application environment
US7793299B2 (en) * 2005-08-30 2010-09-07 International Business Machines Corporation System and method for scheduling tasks for execution
CN101599027B (zh) * 2009-06-30 2013-02-13 中兴通讯股份有限公司 一种线程池管理方法及其系统

Also Published As

Publication number Publication date
WO2010145429A1 (zh) 2010-12-23
CN101599027A (zh) 2009-12-09
EP2434401A4 (en) 2016-12-21
EP2434401A1 (en) 2012-03-28
BRPI1010168A2 (pt) 2016-03-29
CN101599027B (zh) 2013-02-13

Similar Documents

Publication Publication Date Title
BRPI1010168B1 (pt) método para gerenciar um thread pool e sistema para gerenciar um thread pool
Zhang et al. Faster and cheaper serverless computing on harvested resources
US11238008B2 (en) Automatic archiving of data store log data
CN106936622B (zh) 一种分布式存储系统升级方法和装置
CN107451147B (zh) 一种kafka集群动态切换的方法和装置
KR20130136449A (ko) 데이터-센터 서비스의 제어된 자동 힐링
CN111897558A (zh) 容器集群管理系统Kubernetes升级方法和装置
US9984139B1 (en) Publish session framework for datastore operation records
US10069674B2 (en) Monitoring file system operations between a client computer and a file server
TWI759708B (zh) 在區塊鏈中同時執行交易的方法和裝置及電腦可讀儲存媒體與計算設備
CN110109741B (zh) 循环任务的管理方法、装置、电子设备及存储介质
CN114995771A (zh) 独立磁盘冗余阵列格式化调度方法、装置、设备及介质
CN112256433B (zh) 基于Kafka集群的分区迁移方法和装置
CN108304296A (zh) 一种服务器监控方法、系统、设备及计算机可读存储介质
Kassela et al. Automated workload-aware elasticity of NoSQL clusters in the cloud
Tavakoli et al. Log-assisted straggler-aware I/O scheduler for high-end computing
CN112948169A (zh) 数据备份的方法、装置、设备和存储介质
US20140164851A1 (en) Fault Processing in a System
KR102124897B1 (ko) 분산 메시지 시스템 및 분산 메시지 시스템에서의 동적 파티셔닝 방법
CN116069765A (zh) 数据迁移方法、装置、电子设备及存储介质
CN115065558A (zh) Apt攻击的攻击流程溯源方法及装置
CN110837428A (zh) 存储设备管理方法及装置
CN114201284A (zh) 定时任务管理方法及系统
CN114416689A (zh) 数据迁移方法、装置、计算机设备、存储介质
CN113905092A (zh) 一种确定可复用代理队列的方法、装置、终端及存储介质

Legal Events

Date Code Title Description
B06F Objections, documents and/or translations needed after an examination request according art. 34 industrial property law
B06U Preliminary requirement: requests with searches performed by other patent offices: suspension of the patent application procedure
B09A Decision: intention to grant
B16A Patent or certificate of addition of invention granted

Free format text: PRAZO DE VALIDADE: 20 (VINTE) ANOS CONTADOS A PARTIR DE 26/05/2010, OBSERVADAS AS CONDICOES LEGAIS.