Grupo Softplan conclui aquisição da govtech 1Doc e reforça estratégia de transformação digital das cidades brasileiras 
Abril 30, 2025

Grupo Softplan conclui aquisição da govtech 1Doc e reforça estratégia de transformação digital das cidades brasileiras 

A startup, que faz a gestão de processos digitais em prefeituras e já pertencia majoritariamente ao Grupo desde 2019, apresentou crescimento expressivo de 75% ao longo de seis anos  Florianópolis, abril de 2025 – O Grupo Softplan, uma das maiores empresas de SaaS e de transformação digital do Brasil, acaba de oficializar a aquisição da totalidade da 1Doc, especializada na digitalização de processos, comunicação institucional e atendimento ao cidadão em prefeituras e órgãos públicos. Em uma jornada que teve início em 2017 com um aporte estratégico e, posteriormente em 2019, com a compra majoritária da empresa, a companhia finaliza a compra do restante junto a Jéferson de Castilhos, um dos fundadores, e passa a deter 100% da startup. No ano passado, a participação de Jaison Niehues, outro sócio fundador, já havia sido adquirida.   Compondo a vertical de Setor Público do grupo desde 2019, a 1Doc apresentou uma Taxa de Crescimento Anual Composta (CAGR) de 75% entre 2019 e 2025. “A jornada com a 1Doc representa exatamente como acreditamos que a relação com o ecossistema de inovação e startups deva acontecer: com visão a longo prazo, colaboração e impacto real. A startup cresceu dentro do ecossistema Softplan, evoluiu com autonomia e agora se consolida como uma peça-chave da nossa estratégia para transformar o setor público”, afirma Eduardo Smith, CEO do Grupo Softplan.   Fundada em 2014, a 1Doc nasceu com o propósito de digitalizar processos e aproximar cidadãos e governos por meio de uma plataforma 100% em nuvem. Hoje, atende em média 1000 entidades em todo o país e conta com um time de 141 colaboradores, reforçando seu alcance e relevância no setor público, sendo responsável por impactar diretamente a vida de mais de 22 milhões de brasileiros.  "Temos grande apreço pela cultura da 1Doc e muito orgulho da trajetória de crescimento que construímos ao longo dos anos, sempre guiados por um propósito claro. Hoje, temos plena certeza do impacto positivo que nossos serviços geram, facilitando a rotina de nossos clientes — que reconhecem tanto o valor das nossas soluções quanto a relevância do trabalho que entregamos”, celebra Alice Luz, CEO da 1Doc.  A compra vai permitir ampliar a integração que já existe entre os produtos, possibilitando o desenvolvimento de funcionalidades em parceria entre Softplan Setor Público e 1Doc, trazendo expertises de funcionalidades com o uso de inteligência artificial e machine learning voltadas à automatização de processos, validação e classificação documental e atendimento digital em larga escala.  “A 1Doc trouxe para o nosso portfólio uma solução altamente escalável e de fácil implantação, capaz de atender desde pequenos municípios até grandes centros urbanos. Hoje, essa solução é parte central da nossa entrega para cidades e entidades mais eficientes, conectados e centrados no cidadão”, explica Márcio Santana, Diretor Executivo da Softplan Setor Público.  Estratégia de aquisições   Com a 1Doc totalmente integrada ao portfólio, a empresa ampliará sua capacidade de oferecer uma jornada digital completa — da tramitação documental ao atendimento ao cidadão — com soluções SaaS, em nuvem e de fácil escalabilidade.  “A trajetória com a 1Doc é um exemplo claro da nossa estratégia de aquisições: identificar empresas com alto potencial de crescimento e forte sinergia com nosso negócio. Desde o primeiro investimento, nosso objetivo foi impulsionar a solução, unindo capacidades e ampliando o valor entregue ao cliente final. A aquisição total consolida esse movimento e reforça nosso compromisso em construir jornadas mais eficientes e conectadas para os nossos clientes”, afirma Alex Anton, Diretor de M&A e Estratégia do Grupo Softplan.   A compra da startup fortalece também a atuação do grupo junto ao movimento de cidades inteligentes, promovendo inovação com foco em transparência, participação cidadã, redução de custos e maior eficiência da máquina pública. 

Grupo Softplan conclui aquisição da Oystr para reforçar ecossistema de inteligência legal
Abril 30, 2025

Grupo Softplan conclui aquisição da Oystr para reforçar ecossistema de inteligência legal

Empresa especialista em robôs de automação para o mercado jurídico é a 13ª aquisição da companhia; estratégia da Softplan Inteligência Legal é complementar o portfólio de soluções Projuris para escritórios de advocacia e departamentos jurídicos Florianópolis, abril de 2025 – O Grupo Softplan, um dos maiores ecossistemas de tecnologia e SaaS do país, segue sua estratégia de crescimento e anuncia a aquisição da Oystr, legaltech especializada em automação de fluxos jurídicos e gestão de certificados digitais. A empresa passa a integrar o portfólio da Softplan Inteligência Legal, vertical dedicada a soluções para o setor jurídico e escritórios de advocacia, que tem a Projuris como principal solução. Essa é a 13ª aquisição da companhia em seus 34 anos de história. Desde 2020, o Grupo Softplan tem intensificado essa estratégia, totalizando 12 aquisições nos últimos cinco anos. Com essa nova movimentação, a Softplan Inteligência Legal amplia seu portfólio com soluções que automatizam tarefas jurídicas, como captura de publicações, peticionamento eletrônico, gestão de certificados digitais. A solução se integra a sistemas externos, otimizando fluxos de trabalho e aumentando a eficiência dos profissionais do setor. “Monitoramos o potencial da Oystr no mercado e identificamos a oportunidade de fortalecer ainda mais nossa vertical. Essa aquisição amplia a integração de soluções de automação e potencializa o uso da Inteligência Artificial em nossos produtos”, destaca Eduardo Smith, CEO do Grupo Softplan. Já para Rafael Caillet, CEO da Oystr, a aquisição representa um marco importante nos mais de 10 anos de história da startup, que também tem Leandro Cruz e Jonas Pacheco como sócios-fundadores. “Integrar nossa solução ao maior ecossistema jurídico do país é um passo fundamental para impulsionar a automação no setor e ampliar a eficiência dos profissionais”, aponta o executivo. Recentemente, a empresa lançou o Presto, solução inovadora para gestão de credenciais e certificados digitais. Com a inclusão da Oystr em seu portfólio, a Softplan Inteligência Legal projeta um crescimento de 38% para o ano de 2025, em relação a 2024. Sidney Falcão, diretor executivo da unidade de negócio, ressalta que a implementação de RPA (Automatização de Processos Robóticos) é um diferencial estratégico para maximizar a produtividade e eficiência dos clientes. “Nosso compromisso é oferecer uma experiência completa, que vai desde a otimização de tarefas repetitivas até a gestão integrada de documentos e processos jurídicos. Identificamos sinergias que não apenas agilizam as operações, mas também agregam valor direto ao mercado”, conclui. O crescimento inorgânico do Grupo Softplan considera pilares como sinergia de produtos e cultura organizacional. “Nosso processo de M&A avalia cuidadosamente a complementariedade das soluções e a afinidade cultural entre as empresas. Isso garante que entreguemos um ecossistema mais robusto aos clientes e potencializemos os talentos das duas operações”, explica Smith. Potencial de tecnologia Os robôs utilizados pela Oystr são multi sistemas, o que pode vir a aumentar o fluxo de tarefas. “Ao todo, temos mais de 480 robôs ativos, mas se considerarmos que o mesmo robô que realiza uma tarefa na Bahia também atua em Roraima, no Paraná ou em qualquer outro estado, este indicador aumenta consideravelmente, impulsionando o fluxo de sistemas em todo o país”, diz Rafael Caillet. A empresa possui alta capacidade de processamento de dados, o que por sua vez potencializa a automação de diversos escritórios de advocacia e departamentos jurídicos. Nos últimos seis anos, os robôs da Oystr realizaram mais de 250 milhões de tarefas. Foram mais de 600 empresas impactadas que, por meio de tecnologia de ponta, tornaram seus negócios mais eficientes e sustentáveis. Fundada em 2014 para automatizar tarefas jurídicas repetitivas e custosas, os mais de 1.000 robôs já desenvolvidos pela Oystr realizam a coleta de intimações, protocolos em massa, alimentação de sistemas internos, entre outras funções. Seus mais de 300 clientes incluem Nelson Wilians Advogados, Mascarenhas Barbosa Advogados, Góes & Nicoladelli, Pereira Gionedis Advogados, Pellon & Associados, Unimed Curitiba. Sócios-fundadores da Oystr: Jonas Pacheco, CTO (esquerda); Rafael Caillet, CEO (centro); Leandro Cruz, Head de Big Data e Machine Learning (direita)

Softplan Setor Público avança na América Latina e assina contrato com Poder Judicial do Peru  
Abril 30, 2025

Softplan Setor Público avança na América Latina e assina contrato com Poder Judicial do Peru  

Referência em transformação digital para o setor público brasileiro e colombiano, a empresa expande a atuação na América Latina implementando soluções tecnológicas em processos judiciais em todo o território peruano.   Florianópolis, março de 2025 – A Softplan Setor Público, pioneira em automação de processos para instituições públicas e uma das verticais de atuação do Grupo Softplan, venceu uma licitação internacional e passa a trabalhar junto com o Poder Judicial do Peru. O contrato está entre os maiores já firmados e endossa o plano estratégico de não apenas exportar alta tecnologia, mas também apresentar a outros países o modelo de justiça digital brasileiro. O projeto denominado EJE NO PENAL evidencia a robustez da solução tecnológica, que é referência no Brasil, e que também foi adotada pela Jurisdição Especial para a Paz (JEP), na Colômbia - justiça transicional criada com o propósito de reparação com o acordo de paz entre o Governo Nacional e as FARC-EP.  O contrato com o Poder Judicial do Peru consiste na implementação de uma plataforma tecnológica para gestão de processos não criminais em todo o território peruano, reforçando a Softplan Setor Público como trusted advisor em transformação digital em governos e Justiça. Com isso, o governo peruano terá o apoio tecnológico para suprir a necessidade de aperfeiçoar os processos judiciais, trazendo tecnologias de ponta, por meio do produto SAJ Tribunais, que assegura uma significativa redução no tempo de tramitação, elevando a eficiência, transparência e acesso aos serviços judiciais à população. A solução tem hoje mais de 27 milhões de processos judiciais em tramitação e outros 100 milhões já foram finalizados.  “Este é um projeto de relevância por abranger o judiciário de todo um país. Será um momento de transformação digital para os nossos vizinhos e poder contribuir com a expertise da Softplan Setor Público nesse desafio nos traz uma responsabilidade e orgulho imenso das nossas tecnologia e experiência. Em termos de estratégia, a internacionalização faz parte de um dos nossos principais objetivos de crescimento e contar com o Poder Judicial do Peru no portfólio endossa ainda mais a nossa estratégia”, destaca Márcio Santana, Diretor Executivo da Softplan Setor Público.     “Este acordo representa um marco histórico para o Poder Judiciário e para o país, um ponto de viragem na modernização do sistema judicial, permitindo a implementação de soluções tecnológicas inovadoras que irão transformar a administração da justiça e a gestão dos processos”, disse a presidente do Poder Judicial do Peru, a juíza suprema Janet Ofelia Lourdes Tello Gilardi. (...) A revolução tecnológica na administração da justiça ocorrerá então, maior eficiência, redução do tempo processual, otimização da carga de trabalho, a digitalização minimizará atrasos desnecessários, transparência nos processos judiciais, garantia de acesso à informação promovendo uma maior justiça acessível e fiável”, complementou.   Com a assinatura formalizada, os servidores do Poder Judicial Peruano terão à disposição uma solução de processos digitais com benefícios que permitem manter a integridade, segurança e consistência, além de apoiar a tomada de decisões com base em informações de processos.   “Com o marco da assinatura do contrato temos pela frente um projeto de modernização que envolve 34 Cortes Superiores de Justiça em todo o Peru Serão mais de 18 mil usuários e aproximadamente 1.700 órgãos envolvidos na implantação deste projeto. Iniciaremos por uma etapa de parametrização da solução à realidade local e depois seguiremos com treinamentos e acompanhamento assistido dos usuários no processo de apropriação da solução. Desafio este de magnitude e impacto nacional, reforça Márcio quanto à execução do projeto.   Há mais de 30 anos no mercado, a Softplan Setor Público oferece um serviço pioneiro na implementação de processos digitais na justiça brasileira, promovendo soluções que garantem agilidade, transparência e eficiência em todos os processos. Somente em 2024, 201 milhões de brasileiros foram impactados pelas soluções promovidas pela companhia, o que equivale a 91% da população brasileira. Com relação à eficiência, os tribunais que utilizam o SAJ tiveram redução de até 90% no tempo entre a distribuição do processo e o primeiro ato do magistrado; 6,2 mil horas economizadas na distribuição automática de processos e 19,5 milhões de horas otimizadas com a incorporação automática de documentos – os números se referem ao período de 2015-2020.    Com relação à economia com a digitalização de processos e redução de impacto ambiental, desde 2009 o sistema evitou 22,6 bilhões de impressões de páginas, possibilitando a não emissão de 596 mil toneladas de CO2, o que equivale às emissões combinadas de uma frota de 864,5 mil toneladas de CO2. A eliminação do papel proporcionou aos Tribunais SAJ uma economia financeira da ordem de 261,3 milhões de reais apenas em 2024. No acumulado, desde 2009, a economia estimada é de 2,26 bilhões de reais. 

A força da colaboração e o cliente como protagonista: impactos da evolução de produtos no Grupo Softplan
Abril 29, 2025

A força da colaboração e o cliente como protagonista: impactos da evolução de produtos no Grupo Softplan

No Grupo Softplan, a evolução dos produtos é um esforço contínuo que envolve a colaboração entre times e um compromisso profundo com o cliente. Em minha função como Product Growth, troco constantemente ideias com outras equipes e recebo feedbacks valiosos dos clientes, seja pela análise de como utilizam o produto ou através de canais específicos de comunicação, como e-mail. Essas interações me proporcionam uma visão clara do impacto que a evolução contínua dos produtos tem no sucesso da empresa e no valor entregue aos clientes. Este artigo explora como a colaboração entre times e o foco no cliente impulsionam a evolução dos nossos produtos, promovendo o crescimento do Grupo Softplan e o sucesso daqueles que utilizam nossas soluções. Colaboração entre times: o motor da inovação O desenvolvimento e a melhoria de produtos no Grupo Softplan exigem uma integração contínua entre diversos times. As soluções de software precisam ser eficazes e alinhadas às demandas do mercado. Embora não faça parte diretamente da definição do roadmap, minha função permite trazer insights valiosos com base em interações com clientes e dados de performance. Isso contribui diretamente para a priorização de iniciativas de desenvolvimento. Estudos da Forbes indicam que empresas que incentivam a colaboração interna têm 4,5 vezes mais chances de reter os melhores talentos e inovar com mais eficiência (Forbes on Collaboration). No Grupo Softplan, a colaboração eficaz é um dos pilares para garantir que as necessidades dos clientes sejam atendidas com agilidade e eficiência. As áreas de produto, marketing, growth e comercial trabalham juntas continuamente, sempre buscando alinhar as iniciativas com as demandas do mercado. Esse trabalho colaborativo, aliado ao apoio da equipe de Growth na priorização das iniciativas, integra diferentes perspectivas e áreas da empresa, permitindo ajustes constantes nos produtos e impulsionando a criação de inovações a partir dessas interações entre departamentos. Cliente como protagonista: o guia das nossas decisões No Grupo Softplan, o cliente está no centro de todas as decisões, especialmente na Unidade de Indústria e Construção, onde o valor de "cliente como protagonista" orienta nossa forma de trabalho. Utilizamos canais específicos para coletar feedbacks contínuos, e esses insights moldam as iniciativas de produto. Conforme apontado pela Salesforce, 80% dos clientes consideram a experiência oferecida por uma empresa tão importante quanto seus produtos e serviços (Salesforce State of the Connected Customer). Na prática, isso significa que, ao ouvir os usuários e ajustar nossos produtos com base em suas demandas, fortalecemos o relacionamento e aumentamos a lealdade à nossa marca. Um exemplo disso foi a recente atualização de funcionalidades, baseada no feedback dos clientes, que trouxe comunicações mais diversificadas em módulos do produto, alinhando-se às necessidades identificadas. Essa abordagem orientada pelo cliente não apenas atende às necessidades atuais, mas também nos permite antecipar demandas futuras. Esse processo contínuo solidifica nosso papel como parceiro estratégico para os clientes. Impacto no mercado: inovação e crescimento O Grupo Softplan se destaca no mercado por seu compromisso com a inovação e foco em resultados concretos. Ajustar nossos produtos com base no feedback direto dos clientes tem um impacto direto no crescimento da empresa e na satisfação dos usuários. Como mencionado, a atualização das comunicações mais diversificadas em módulos do produto foi uma resposta direta a esses feedbacks, destacando como a comunicação contínua com o cliente guia a evolução das nossas soluções. De acordo com a PwC, empresas que priorizam a experiência do cliente podem ver um aumento de 16% na receita e uma maior retenção de clientes (PwC Future of Customer Experience Survey). Essa realidade também se aplica ao Grupo Softplan, onde o ajuste contínuo e o foco nas necessidades dos clientes nos ajudam a entregar soluções relevantes que se destacam no mercado. O uso estratégico do feedback do cliente não só melhora a experiência do usuário, como também garante que estamos sempre um passo à frente em termos de inovação e competitividade. Venha crescer com a gente O Grupo Softplan se destaca por escutar seus clientes e unir seus times para criar soluções que impulsionam os negócios. O valor de "cliente como protagonista" é um guia prático e presente em nossa jornada de evolução de produtos. Colaboramos, inovamos e nos adaptamos, sempre garantindo que as necessidades dos clientes estejam no centro das nossas decisões. Se você valoriza um ambiente que fomenta colaboração e inovação, com oportunidades de aprendizado contínuo e crescimento, o Grupo Softplan é o lugar certo para você. Aqui, nossos valores e objetivos estratégicos são reforçados por treinamentos e pela oportunidade de trabalhar em projetos desafiadores que transformam o mercado de software. Junte-se a nós e faça parte de uma equipe que transforma a vida dos clientes e inova o mercado. Acesse nossa página de carreira.

A Evolução Digital no Setor Público: Gestão de Produtos B2G
Abril 16, 2025

A Evolução Digital no Setor Público: Gestão de Produtos B2G

Nos últimos anos, o setor público tem ampliado seus serviços digitais para os cidadãos. A pandemia de 2020 acelerou essa tendência, impulsionando a modernização de órgãos como Tribunais de Justiça, Ministérios Públicos e Defensorias. Essa transformação visa melhorar a eficiência dos serviços públicos e facilitar o acesso da população. Historicamente, as áreas de Tecnologia da Informação desses órgãos adotaram modelos de gestão de projetos que priorizam a entrega de escopos definidos, com prazos e equipes limitadas às demandas específicas. Contudo, a necessidade crescente de agilidade tem impulsionado a transição para a gestão de produtos. Nesse contexto, o conceito de Business-to-Government (B2G) ganha relevância, destacando a importância da gestão de produtos na oferta de soluções inovadoras para o governo. Como Product Manager atuando em produtos B2G, meu foco é entregar soluções alinhadas às necessidades dos usuários finais. Diferente do setor B2B, onde há um funil de vendas estruturado, a gestão de produtos no setor público exige a adoção de métricas e ferramentas adaptadas a esse ecossistema. Dia a dia de Products Managers no setor público As interações com os clientes iniciam-se após a assinatura do contrato, quando o primeiro contato ocorre com o grupo gestor, formado por servidores responsáveis pela implantação do produto. A partir desse ponto, são obtidos insights sobre as necessidades dos usuários finais, permitindo um entendimento inicial do fluxo de trabalho. Para priorizar o backlog, utilizamos a matriz RICE (Reach, Impact, Confidence, Effort), garantindo que as decisões considerem tanto as exigências contratuais quanto as necessidades dos usuários. Essa priorização ocorre de forma contínua, acompanhando a evolução do produto e dos contratos estabelecidos. No ciclo de desenvolvimento, aplicamos técnicas de experimentação, prototipação e testes de usabilidade com grupos pilotos. Coletamos dados quantitativos e qualitativos para medir a adesão e definir melhorias nas funcionalidades do produto. Exemplo de matriz RICE Com estas premissas em mente, aplicamos aos usuários piloto por exemplo, técnicas de experimentação, prototipação, condução de testes de usabilidade para novas funcionalidades. Também realizamos coletas constantes de dados quantitativos e qualitativos da jornada utilizada por eles, conforme aumenta a adesão. A partir das métricas coletadas, podemos definir se as funcionalidades principais ou acessórias da jornada do nosso usuário precisam ser evoluídas. Exemplo de insights quantitativos com informações da jornada do usuário na organização de tarefas utilizando a ferramenta MixPanel Exemplo de uso da ferramenta INDECX para informações qualitativas a respeito do produto ou funcionalidade Tríade de produto entregando resultados eficientes A gestão de produtos no setor público exige uma abordagem colaborativa, integrando time técnico, equipe de experiência do usuário e cliente. Essa interação contínua fortalece o alinhamento estratégico e a clareza sobre a evolução do produto. O roadmap do produto é compartilhado com o cliente para garantir transparência e previsibilidade nas entregas. Tríade de produto O Grupo Softplan se consolidou como referência na transformação digital do setor público, gerando impactos positivos para os cidadãos. Soluções como o Sistema de Automatização da Justiça (SAJ) proporcionam eficiência e celeridade nos serviços públicos. Como Product Manager na Softplan, contribuo para a gestão de produtos voltados ao setor público. Um exemplo é o SAJ Defensorias, cujo painel de tarefas foi desenvolvido após estudo de negócios e análise técnica baseada na tríade de produtos. Esse painel centraliza atividades diárias, priorizando tarefas a serem executadas imediatamente e organizando as finalizadas para referência futura. Solução SAJ Softplan Nosso objetivo é oferecer produtos intuitivos e eficientes, que atendam às demandas cotidianas dos defensores públicos e contribuam para a melhoria da prestação de serviços à sociedade. Painel de tarefas do Defensor no SAJ Defensorias As iniciativas digitais no setor público têm grande potencial de crescimento, impulsionadas pela cultura de produtos. A transformação digital é irreversível e continuará evoluindo para atender às expectativas da sociedade por serviços mais ágeis, eficientes e transparentes.

Exaustão do ThreadPool do .Net
Março 25, 2025

Exaustão do ThreadPool do .Net

Mais de uma vez em minha carreira me deparei com este cenário: a aplicação .Net frequentemente mostrando tempos de resposta elevados. Esta alta latência pode ter várias causas, como lentidão no acesso a algum recurso externo (um banco de dados ou uma API, por exemplo), uso de CPU “batendo” em 100%, sobrecarga de acesso a disco, entre outras. Quero adicionar à lista anterior outra possibilidade, muitas vezes pouco considerada: exaustão do ThreadPool. Será apresentado de forma bem rápida como o ThreadPool do .Net funciona, e exemplos de códigos onde isto pode acontecer. Por fim, será demonstrado como evitar este problema. O ThreadPool do .Net O modelo de programação assíncrona baseado em Tasks (Task-based asynchronous programming) do .Net é bastante conhecido pela comunidade de desenvolvimento, mas acredito que seja pouco compreendido em seus detalhes de implementação - e é nos detalhes onde mora o perigo, como bem diz o ditado. Por trás do mecanismo de execução de Tasks do .Net existe um Scheduler, responsável, como seu nome já indica, por escalonar a execução das Tasks. Salvo alguma mudança explícita, o scheduler padrão do .Net é o ThreadPoolTaskScheduler, que também como o nome indica, utiliza o ThreadPool padrão do .Net para realizar seu trabalho. O ThreadPool gerencia então, como já se esperava, um pool de threads, para as quais ele atribui as Tasks que recebe usando uma fila. É nesta fila onde as Tasks ficam armazenadas até que haja um thread livre no pool, para então iniciar seu processamento. Por padrão, o número mínimo de threads do pool é igual ao número de processadores lógicos do host. E aqui está o detalhe em seu funcionamento: quando existem mais Tasks a serem executadas do que o número de threads do pool, o ThreadPool pode esperar uma thread ficar livre ou criar mais threads. Se escolher criar uma nova thread e se o número atual de threads do pool for igual ou maior que o número mínimo configurado, este crescimento demora entre 1 e 2 segundos para cada nova thread adicionada ao pool. Observação: a partir do .Net 6 foram introduzidas melhorias neste processo, permitindo que haja um aumento mais rápido no número de threads do ThreadPool, mas ainda assim a ideia principal se mantém. Vamos a um exemplo para deixar mais claro: suponha um computador com 4 cores. O valor mínimo do ThreadPool será 4. Se todas as Tasks que chegarem processarem rapidamente seu trabalho, o pool poderá inclusive ter menos do que o mínimo de 4 threads ativas. Agora, imagine que 4 Tasks de duração um pouco mais longa chegaram simultaneamente, utilizando então todas as threads do pool. Quando a próxima Task chegar à fila, ele precisará esperar entre 1 e 2 segundos, até que uma nova thread seja adicionada ao pool, para então sair da fila e começar a processar. Se esta nova Task também tiver uma duração mais longa, as próximas Tasks esperarão novamente na fila e precisarão “pagar o pedágio” de 1 a 2 segundos antes de poderem começar a executar. Se esse comportamento de novas Tasks de longa duração se mantiver por algum tempo, a sensação para os clientes deste processo será de lentidão, para qualquer nova tarefa que chegar à fila do ThreadPool. Este cenário é chamado de exaustão do ThreadPool (ThreadPool exhaustion ou ThreadPool starvation). Isso ocorrerá até que as Tasks finalizem seu trabalho e comecem a retornar as threads ao pool, possibilitando a redução da fila de Tasks pendentes, ou que o pool consiga crescer suficientemente para atender à demanda atual. Isso pode demorar vários segundos, dependendo da carga, e só então a lentidão observada anteriormente deixará de existir. Código síncrono x assíncrono É preciso agora fazer uma distinção importante sobre tipos de trabalho de longa duração. Geralmente eles podem ser classificados em 2 tipos: limitados pela CPU/GPU (CPU-bound ou GPU-bound), como a execução de cálculos complexos, ou limitados por operações de entrada/saída (I/O-bound), como o acesso a bancos de dados ou chamadas à rede. No caso de tarefas CPU-bound, salvo otimizações de algoritmos, não há muito o que fazer: é preciso ter processadores em quantidade suficiente para atender à demanda. Mas, no caso de tarefas I/O-bound, é possível liberar o processador para responder a outras requisições enquanto se espera a finalização da operação de I/O. E é exatamente isso que o ThreadPool faz quando APIs assíncronas de I/O são usadas. Neste caso, mesmo que a tarefa específica ainda seja demorada, a thread será retornada para o pool e poderá atender a uma outra Task da fila. Quando a operação de I/O finalizar, a Task será enfileirada novamente para então continuar a executar. Para saber mais detalhes sobre como o ThreadPool aguarda o fim de operações de I/O, clique aqui. Entretanto, é importante observar que ainda existem APIs síncronas de I/O, que causam o bloqueio da thread e impedem sua liberação para o pool. Estas APIs - e qualquer outro tipo de chamada que bloqueie uma thread antes de retornar a execução - comprometem o bom funcionamento do ThreadPool, podendo causar sua exaustão quando submetidos a cargas suficientemente grandes e/ou longas. Podemos dizer então que o ThreadPool – e por extensão o ASP.NET Core/Kestrel, desenhados para operar assincronamente – é otimizado para execução de tarefas de baixa complexidade computacional, com cargas I/O bound assíncronas. Neste cenário, um pequeno número de threads é capaz de processar um número bastante elevado de tasks/requisições de maneira eficiente. Bloqueio de threads com ASP.NET Core Vamos ver alguns exemplos de código que causam o bloqueio de threads do pool, usando ASP.NET Core 8. Observação: estes códigos são exemplos simples, que não visam representar nenhuma prática, recomendação ou estilo em especial, exceto os pontos relacionados à demonstração do ThreadPool especificamente. Para manter o comportamento idêntico entre os exemplos, será usado uma requisição a banco de dados SQL Server que simulará uma carga de trabalho que demora 1 segundo para retornar, usando a sentença WAITFOR DELAY. Para gerar uma carga de utilização e demonstrar os efeitos práticos de cada exemplo, utilizaremos o siege, um utilitário de linha de comando gratuito destinado a esta finalidade. Em todos os exemplos será simulada uma carga de 120 acessos concorrentes durante 1 minuto, com um atraso aleatório de até 200 milissegundos entre as requisições. Estes números são suficientes para demonstrar os efeitos sobre o ThreadPool sem gerar timeouts no acesso ao banco de dados. Versão Síncrona Vamos começar com uma implementação completamente síncrona: A action DbCall é síncrona, e o método ExecuteNonQuery do DbCommand/SqlCommand é síncrono, portanto, bloqueará a thread até que haja o retorno do banco de dados. Abaixo está o resultado da simulação da carga (com o comando siege utilizado). Vejam que conseguimos uma taxa de 27 requisições por segundo (Transaction rate), e um tempo de resposta médio (Response time) de cerca de 4 segundos, com a requisição mais longa (Longest transaction) durando mais de 16 segundos – um desempenho bastante precário. Versão Assíncrona – Tentativa 1 Vamos agora utilizar uma action assíncrona (retornando Task<string>), mas ainda utilizar o método síncrono ExecuteNonQuery. Executando o mesmo cenário de carga anterior, temos o seguinte resultado. Vejam que o resultado foi ainda pior neste caso, com taxa de requisições de 14 por segundo (contra 27 da versão completamente síncrona) e tempo médio de resposta de mais de 7 segundos (contra 4 da anterior). Versão Assíncrona – Tentativa 2 Nesta próxima versão, temos uma implementação que exemplifica uma tentativa comum – e não recomendada – de transformar uma chamada de I/O síncrona (no nosso caso, o ExecuteNonQuery ) em uma “API assíncrona”, usando Task.Run. O resultado, após a simulação, mostra que o resultado é próximo da versão síncrona: taxa de requisições de 24 por segundo, tempo médio de resposta de mais de 4 segundos e requisição mais longa levando mais de 14 segundos para retornar. Versão Assíncrona – Tentativa 3 Agora a variação conhecida como “sync over async”, onde utilizamos métodos assíncronos, como o ExecuteNonQueryAsync deste exemplo, mas é chamado o método .Wait() da Task retornada pelo método, como mostrado abaixo. Tanto o .Wait() quanto a propriedade .Result de uma Task tem o mesmo comportamento: causam o bloqueio da thread em execução! Executando nossa simulação, podemos ver abaixo como o resultado também é ruim, com taxa de 32 requisições por segundo, tempo médio de mais de 3 segundos, com requisições chegando a levar 25 segundos para retornar. Não à toa, o uso de .Wait() ou .Result em uma Task é desaconselhado em código assíncrono. Solução do problema Finalmente, vamos ao código criado para funcionar da forma mais eficiente, através do de APIs assíncronas e aplicando async / await corretamente, seguindo recomendação da Microsoft. Temos então a action assíncrona, com a chamada ExecuteNonQueryAsync com await. O resultado da simulação fala por si só: taxa de requisições de 88 por segundo, tempo médio de resposta de 1,23 segundos e requisição levando no máximo 3 segundos para retornar - números em geral 3 vezes melhores que qualquer opção anterior. A tabela abaixo sumariza os resultados das diferentes versões, para uma melhor comparação dos dados entre elas. Versão do códigoTaxa de requisições ( /s)Tempo médio (s)Tempo máximo (s)Síncrona27,384,1416,93Assíncrona 114,337,9414,03Assíncrona 224,904,5714,80Assíncrona 332,433,5225,03Solução88,911,233,18 Solução paliativa Vale mencionar que podemos configurar o ThreadPool para ter um número mínimo de threads maior do que o padrão (o número de processadores lógicos). Com isto, ele conseguirá rapidamente aumentar o número de threads sem pagar aquele “pedágio” de 1 ou 2 segundos. Existem pelo menos 3 formas para se fazer isto: por configuração dinâmica, usando o arquivo runtimeconfig.json, por configuração do projeto, ajustando a propriedade ThreadPoolMinThreads, ou por código, chamando o método ThreadPool.SetMinThreads. Isto deve ser encarado como uma medida temporária, enquanto não se faz os devidos ajustes em código como mostrado anteriormente, ou após os devidos testes prévios para confirmar que traz benefícios sem efeitos colaterais de desempenho, conforme recomendação pela Microsoft. Conclusão A exaustão do ThreadPool é um detalhe de implementação que pode trazer consequências inesperadas. E que podem ser difíceis de detectar se considerarmos que .Net possui várias maneiras de obter o mesmo resultado, mesmo em suas APIs mais conhecidas – acredito que motivado por anos de evoluções na linguagem e do ASP.NET, sempre visando compatibilidade retroativa. Quando falamos de funcionamento em taxas ou volumes crescentes, como ao passar de dezenas para centenas de requisições, é essencial conhecer as práticas e recomendações mais recentes. Além disso, conhecer um ou outro detalhe de implementação pode ser um diferencial para se evitar problemas de escala ou diagnosticá-los mais rapidamente. Fique de olho nas próximas publicações do Proud Tech Writers. Em um próximo artigo, vamos explorar como diagnosticar a exaustão do ThreadPool e identificar a origem do problema em código a partir de um processo em execução.