Qual é o tópico?

O primeiro bezerro

Eu sou um fio. Recebi um número quando nasci: 0x3704e depois conduzido a uma sala escura, onde encontrei muitos companheiros que eram exatamente iguais a mim.

O meu companheiro 0x6900 ficou muito tempo. Disse-me nas vicissitudes da vida: "O destino do nosso fio é cuidar do pacote. Depois que o pacote é processado, temos que voltar aqui imediatamente, caso contrário, nunca poderemos voltar de volta. "

Eu era ignorante, "Pacote, que pacote?"

"Não se preocupe, você entenderá imediatamente, não oferecemos suporte a ociosos aqui."

Com certeza, em pouco tempo, a porta da casa se abriu e um cara de aparência feroz gritou: " 0x3704, saia!"

Assim que saí, fui enchido com um pacote pesado com um papel cheio de etapas de operação anexado a ele.

"Apresse-se e cuide deste pacote."

"Onde lidar com isso?"

"Siga as instruções e vá para o workshop pronto primeiro."

Com certeza, havia uma seta indicadora no chão, e ela seguiu para uma grande sala iluminada.Já havia muitos fios aqui, e todos estavam muito nervosos, como se estivessem sempre prontos para correr para frente.

Assim que entrei, ouvi o rádio dizendo: " 0x3704, entra na oficina."

Corri para frente e havia muitas pessoas falando atrás de mim.

"Ele teve muita sorte de poder correr assim que entrou no estado de prontidão."

"Isso importa?"

"Não, você vê o quão alta é a prioridade deles, infelizmente!"

Tem a oficina em frente, é simplesmente lindo aqui, não é à toa que o velho fio sempre me incomoda e diz: "Seria bom se eu pudesse ficar aqui para sempre."

O espaço aqui é grande, a vista é boa, o ar é fresco, os pássaros e as flores são perfumados, e há muita gente que nunca conheci antes, esperando para me servir como um garçom.

Eles também têm números e, mais importante, cada pessoa tem uma etiqueta que diz: disco rígido, banco de dados, memória, placa de rede ...

Não consigo entender agora, basta dar uma olhada nas etapas.

Etapa 1: Retire os parâmetros do pacote.

Abra o pacote, há um objeto HttpRequest dentro, você pode obter dois parâmetros, userName e senha.

Etapa 2: execute a operação de login.

Ai, descobri que alguém queria fazer o login. Dei o userName e a senha para o servidor do banco de dados. Ele pegou os dados e saiu devagar.

Por que ele é tão lento? Mas posso ficar na oficina um pouco? É impossível realizar a terceira etapa de qualquer maneira.

Nesse 0x3704momento , o anúncio na oficina tocou: " , eu sou a CPU, lembre-se dos passos que você está realizando e saia imediatamente com o pacote!"

Eu lentamente comecei a limpar.

"Apresse-se, outros tópicos virão em breve."

Saindo desta oficina, cheguei novamente a uma grande sala, onde muitos fios bebiam chá lentamente e jogavam cartas.

"Cara, você está bem?"

"Você é novo aqui, não sabe que estou esperando que o servidor de banco de dados me forneça dados! Dizem que eles são centenas de milhares de vezes mais lentos que nós, então descanse bem aqui."

"Ah? Tão lento! Alguém aqui está se conectando ao sistema. Você pode esperar tanto tempo?"

“Não se preocupe, você nunca ouviu falar de um dia no mundo e um ano na CPU? Usamos nanossegundos e milissegundos para o tempo aqui. O mundo espera por um segundo, o que equivale a vários dias para nós.

Apenas durma um pouco. Não sei quanto tempo demorou, e o alto-falante voltou a transmitir: " 0x3704, seus dados estão aqui, vá em frente e execute!"

Eu me virei e corri para a oficina da CPU, e descobri que a porta aqui só pode entrar!

Houve gargalhadas por trás: "Com certeza, sou um recém-chegado. Não sei se tenho que ir para a oficina pronta e esperar."

Então, corri para o workshop pronto, sem tanta sorte desta vez, e esperei muito tempo antes de ser chamado para o workshop de CPU novamente.
Enquanto esperava, ouvi alguém sussurrando:

"Você já ouviu falar que um fio foi interrompido recentemente."

"Por quê?"

"Esse cara permaneceu na oficina da CPU e manteve a utilização da CPU em 100%, mas foi eliminado mais tarde."

"Para onde você foi depois da morte?"

"Talvez fosse lixo coletado."

Estremeci no coração e rapidamente comecei a lidar com isso. O resto da ação foi muito mais rápido e a segunda etapa foi conectada com sucesso.

Etapa 3: Crie a página inicial após o login bem-sucedido.

Esta etapa é um pouco demorada, porque há muito HTML que precisa ser processado, e é chato processá-lo sem saber quem escreveu o código.

Eu estava criando HTML de forma nervosa e a CPU começou a chamar:

" 0x3704, Eu sou a CPU, lembre-se dos passos que está executando, e saia imediatamente com o pacote!"

"Por quê?"

"Cada thread só pode ser executado na CPU por um período de tempo. Quando chegar a hora, você terá que deixar outros usá-lo. Vá para a oficina pronta e espere ser chamado."

Desta forma, já estive nos dois estados de "pronto a funcionar" e não sei quantas vezes rodei e finalmente terminei o trabalho de acordo com a lista de passos.

Finalmente, o pacote contendo html foi enviado de volta com sucesso. Quanto ao que fazer após o login, não me importo. Vou voltar para o meu quarto escuro em breve, então me sinto um pouco relutante em estar aqui. No entanto, em comparação com alguns tópicos, ainda tenho sorte, eles são completamente destruídos depois de executados, e eu ainda estou vivo!

De volta à pequena sala negra, o velho tópico 0x6900 perguntou:

"Como? Como você se sentiu no primeiro dia?"

"Nossas regras mundiais são muito complicadas. Em primeiro lugar, você não sabe quando será selecionado para execução; em segundo lugar, o processo de execução pode ser interrompido a qualquer momento e desistir do workshop de CPU; em terceiro lugar, uma vez que discos rígidos e bancos de dados aparecer, leva tempo, você tem que deixar sair a CPU para esperar a operação; quarto, se o dado vier, você pode não executá-lo imediatamente, você tem que esperar que a CPU escolha.

"O jovem entende bem."

"Não entendo por que muitos threads morrem após a execução de tarefas, por que ainda estamos vivos?"

"Você não sabe? A imortalidade é nosso privilégio! Temos um nome oficial aqui, chamado 线程池!"

Melhorando pela segunda vez

Os dias normais passam dia após dia. Como um fio, minha vida diária é pegar pacotes, processá-los e depois voltar para nossa casa sombria: o pool de fios.

Certo dia, quando voltei, ouvi um irmão dizer que hoje devemos descansar bem, e amanhã será o dia mais louco. Olhei para o calendário. Amanhã é 11 de novembro.

Com certeza, logo depois das zero horas, eu não sei o que aconteceu com os humanos, e eles entregaram pacotes loucamente. A fim de lidar com os pacotes enormes que enxameavam, ninguém no pool de threads podia ficar ocioso e todos saíram para processar pacotes. A taxa de utilização da CPU na oficina era extremamente alta. No zumbido, a placa de rede piscava loucamente, mesmo assim, ainda estava inacabada, empilhada como uma montanha.

Não temos escolha, são muitos, a maioria desses pacotes está navegando na página, fazendo pedidos, comprando, comprando e comprando.

Não sei quanto tempo demorou para que a montanha Baoshan finalmente desaparecesse lentamente. Finalmente conseguindo recuperar o fôlego, acho que nunca esquecerei este dia.

Através deste evento, compreendo o mundo em que vivo: este é um site de e-commerce!

Meu trabalho diário é lidar com o login do usuário, navegação, carrinho de compras, pedidos e pagamento.

Perguntei ao veterano do pool de threads 0x6900: "Quando vamos trabalhar?"

"Espere até o momento em que o sistema for reiniciado." 0x6900 disse.

"Então você experimentou uma reinicialização do sistema?"

"Como é possível? O reinício do sistema é o nosso momento de morte, que é o fim do mundo. Uma vez reiniciado, todo o pool de threads será destruído, o tempo e o espaço desaparecerão e tudo começará de novo."

"Quando vai reiniciar?"

"Isso é difícil de dizer, aproveite a vida na sua frente ..."

Na verdade, a vida ainda é rica e colorida. Meu pacote favorito é o upload de fotos. Devido à rede lenta, posso ficar na oficina pronta e na oficina da CPU por muito, muito tempo e posso reconhecer muitos tópicos interessantes.

Por exemplo, quando encontrei o thread do memcached da última vez, ele me disse que armazenou em cache muitos dados do usuário com a ajuda dele e foi distribuído! Em muitas máquinas!

Perguntei a ele: "Não é à toa que as operações de login subsequentes são muito mais rápidas. Acontece que você não obtém mais dados do banco de dados. Ah, sim, você está distribuído. Você já esteve em outras máquinas?"

Ele disse: "Como é possível! Eu só consigo acessar os dados todas as vezes enviando um comando GET, PUT para aquela máquina pela rede, e não sei de mais nada."

Por exemplo, a última vez que encontrei um thread de conexão de banco de dados enquanto esperava, percebi que também é um pool de conexão, que é quase exatamente igual ao nosso pool de thread.

Ele me disse: "Alguns pacotes são tão pervertidos que fiquei exausto para verificar os dados do pedido por um ano."

Eu disse: "Diga, vocês são dados puros. Depois de passar os dados para mim, tenho que montá-los em html. Não sei quantas vezes a carga de trabalho é maior que a sua."

Ele me sugeriu: "Você deve ter um bom relacionamento com o memcached, obter dados diretamente dele e tentar minimizar as chamadas diretas ao banco de dados, para que nossa conexão JDBC também possa viver mais facilmente."

Aceitei de bom grado: "Ok, ok, a chave é que você tem que colocar os dados no cache com antecedência, ou irei perguntar ao cache primeiro, se não houver dados, não preciso ligar para você?"

A vida é assim, se você não se diverte um pouco, de que adianta?

Terceira vez fora de perigo

Eu encontrei uma coisa terrível alguns dias atrás e quase morri do lado de fora, incapaz de retornar ao pool de threads. Na verdade, eu deveria ser capaz de prever esse momento de angústia, pois foi muito descuidado.

Naquele dia, processei alguns pacotes de depósito e retirada de http. O antigo tópico 0x6900 me perguntou especificamente: "Você deve ter muito cuidado ao manusear esses pacotes. Você deve primeiro obter um bloqueio ao depositar ou retirar dinheiro de sua conta. A conta deve ser trancado, ou outros fios entrarão enquanto você espera e o destruirá. Quando eu era jovem, eu era muito rude, então eu apunhalei a cesta. "

Para me "intimidar", 0x6900 gentilmente me deu dois formulários:

(1) Sem bloqueio

img

(2) O caso de bloqueio

img

Fiquei horrorizado ao ver isso, descobriu-se que o desbloqueio traria um acidente tão grave. Desde então, tenho sido mais cuidadoso ao ver os pacotes de depósitos e retiradas, felizmente não houve acidentes.

Um dos pacotes que recebi hoje foi uma transferência de dinheiro da conta de um ator famoso para a conta de um diretor famoso. Não vou revelar quem é. A quantia não é pequena.

De acordo com as instruções do velho tópico, devo bloquear a conta primeiro, bloquear a conta do ator famoso e, em seguida, bloquear a conta do diretor famoso.

Mas o que eu nunca esperava era que houvesse outro thread, sim, 0x7954, que na verdade transferiu dinheiro da conta do diretor para a conta do ator ao mesmo tempo.

Desde então, houve tal situação:

img

No começo eu não sabia o que estava acontecendo, ficava sentado e esperando na oficina, mas o tempo de espera era muito longo, chegava a dezenas de segundos! Nunca experimentei tal incidente.

Nessa hora eu vi o tópico 0x7954, ele estava sentado ali tomando café vagarosamente, e eu conversei com ele:

"Cara, acho que você já bebeu 8 xícaras de café, por que não vai trabalhar?"

"Você não está bebendo 9 xícaras de chá?" 0x7954 respondeu.

"Estou esperando uma fechadura, não sei qual neto não a liberou!"

"Também estou esperando a fechadura. Se eu souber qual neto não abre a fechadura, devo espancá-lo até a morte!" 0x7954 Sem demonstração de fraqueza.

Eu olhei secretamente para ele. Esse cara não segura a fechadura do diretor que estou esperando em seus braços?

Obviamente, 0x7954 também descobriu que eu estava segurando a fechadura que ele esperava.

Logo nós dois brigamos e nos recusamos a dar um ao outro:

"Dê-me sua fechadura primeiro e deixe-me terminá-la primeiro!"

"Não, eu sempre libero a trava depois de terminar o trabalho, agora não posso dar para você!"

Da discussão à luta, leva apenas alguns segundos. Mais importante, nós dois não apenas seguramos as fechaduras desse famoso diretor e ator, mas também muitas outras fechaduras. Como resultado, havia cada vez mais fios de espera e os espectadores lotaram a sala. No final das contas, as coisas realmente fizeram uma grande bagunça, e o "sistema operacional" chefe supremo que eu nunca tinha visto antes também apareceu. Afinal, o chefão é muito experiente. Ele olhou para ele, bufou e disse com desdém:

"Há outro impasse."

"Vocês dois vão matar um, venha, venha e tire a sorte."

De repente, fiquei com medo de fazer xixi. É tão sério! Desenhei muito, tremendo, e abri para ver que era um personagem "vivo". Infelizmente, minha vida foi finalmente salva.

O pobre 0x7954 foi forçado a entregar todos os recursos, mas infelizmente foi morto e desapareceu. Consegui o bloqueio do diretor e posso começar a trabalhar. O big boss "sistema operacional" desapareceu como uma rajada de vento, e apenas sua voz veio de trás:

"Lembre-se, aqui somos diretor> ator, não importa qual seja a situação, devemos primeiro conseguir a fechadura do diretor."

Como não existem apenas diretores e atores, mas também muitas outras pessoas, o chefão deixou uma mesa com um algoritmo para calcular o tamanho do recurso. Após o cálculo ser calculado, o bloqueio é sempre obtido do maior para o menor:

img

Voltei para o pool de threads, todos sabiam das minhas aventuras e continuaram me fazendo perguntas.

O escalonador de threads feroz postou o algoritmo Big Boss na parede.

Todas as manhãs, todos nós temos que ficar na porta como agentes domésticos e garçons inescrupulosos em salões de beleza, recitando em voz alta como macacos:

"Lembre-se de que, ao bloquear vários recursos, você deve comparar os tamanhos de acordo com o algoritmo Boss e, em seguida, começar a bloquear a partir do maior."

Adeus pela quarta vez

Depois de muitos mais dias, eu e outros threads descobrimos uma coisa estranha: o processamento de pacotes está ficando cada vez mais fácil e simples, não importa qual pacote, seja logando, navegando, economizando dinheiro ... as etapas de processamento são as mesmas, retornar uma página html fixa.

Uma vez que dei uma olhada furtiva, ele disse: "Este sistema será mantido e atualizado das 00:00 às 4:00 desta noite. Lamentamos o inconveniente causado a você!"

Eu disse ao velho tópico 0x6904, ele suspirou e disse:

"Ah, nossas vidas estão chegando ao fim. Parece que o sistema está para ser reiniciado e vamos desaparecer. Adeus irmão."

O momento em que o sistema reiniciado finalmente chegou. Eu vi que tudo na sala desapareceu um por um, e a oficina em espera, a oficina pronta e até mesmo a oficina de CPU foram desaparecendo lentamente. Há cada vez menos irmãos da linha ao meu redor e, no final, sou o único que resta.

Gritei em campo aberto: "Tem mais alguém?"

Ninguém respondeu.

Nossa geração de pool de threads cumpriu sua missão ...

Mas o pool de threads da próxima geração está prestes a renascer!

(Fim do texto completo)


【文章来源】《码农翻身》
【转载来源】https://www.orchome.com/142

Acho que você gosta

Origin blog.csdn.net/weixin_45496190/article/details/106732599
Recomendado
Clasificación