vb.net usa o GZipStream que vem com .net para compactar ou descompactar arquivos sem nenhum controle de terceiros

Existem poucos códigos de arquivo compactados escritos em VB na Internet, mas há mais necessidades em transmissão de rede, download de arquivo, lançamento em pacote, etc., então aprendi com o exemplo de código C # e o transformei em uma classe para VB. Também foi adicionada compactação e descompactação de pastas em várias camadas. No entanto, devido ao tempo limitado, todos os arquivos são apenas lidos no cache para processamento, portanto, nenhum processamento especial é feito para arquivos grandes. Existem dicas no exemplo, portanto, altere-o conforme necessário.

Arquivo: n459.com/file/25127180-478678624

O seguinte é irrelevante:

-------------------------------------------Linha divisória----- ----------------------------------------

No desenvolvimento diário, para garantir a consistência dos dados, geralmente optamos por bancos de dados relacionais para armazenar dados, como MySQL, Oracle, etc., porque os bancos de dados relacionais possuem características de transação. No entanto, em cenários de negócios com grande simultaneidade, os bancos de dados relacionais costumam se tornar o gargalo do sistema e não podem atender totalmente às nossas necessidades, então precisamos usar o cache em vez de bancos de dados relacionais, ou seja, os bancos de dados NoSQL geralmente se tornam os melhores selecione.

A explicação mais comum para bancos de dados NoSQL é não relacional, e algumas pessoas a explicam como Não somente SQL. Os bancos de dados não relacionais não garantem transações, ou seja, não possuem recursos de transação ACID. Essa é a maior diferença entre os bancos de dados não relacionais e os relacionais. O Redis que vamos apresentar é um tipo de banco de dados NoSQL.

Qual é o
nome completo do Redis Redis: REmote DIctionary Service, ou seja, serviço de dicionário remoto. O Redis é um banco de dados de valor-chave de código aberto (em conformidade com o protocolo BSD), com suporte de rede, baseado em memória e log persistente.
O Redis possui as seguintes características:

1. Suporta tipos de dados ricos: strings, hashes, listas, conjuntos, conjuntos classificados, bitmaps, etc.
2. Funções ricas: fornece mecanismo de persistência, estratégia de expiração, assinatura / liberação e outras funções.
3. Alto desempenho, alta disponibilidade e suporte a cluster.
4. APIs em vários idiomas são fornecidos.
Instalação do Redis
1. Baixe o pacote de instalação da versão correspondente, como a versão Redis 5.0.5, outras versões também podem ser baixadas aqui.
2. Após a conclusão do download, transfira-o para o diretório especificado do servidor e execute o comando tar -zxvf redis-5.0.5.tar.gz para descompactá-lo.
3. Depois que a descompactação for bem-sucedida, entre no diretório principal do Redis e execute o comando make && make install PREFIX = / xxx / xxx / redis-5.0.5 para instalar.Se você não especificar um diretório, o padrão é instalar no diretório / usr / local.
4. Depois que a instalação for bem-sucedida, você pode ver que há um diretório bin adicional no diretório inicial do Redis, e o diretório bin contém alguns scripts executáveis.
5. Volte para o diretório inicial do Redis, encontre o arquivo de configuração redis.conf, modifique o daemon de configuração no para daemonizar sim, o que significa iniciar o serviço em segundo plano.
6. Em seguida, você pode executar o comando /xxx/xxx/redis-5.0.5/bin/redis-server /xxx/xxx/redis-5.0.5/redis.conf para iniciar o serviço Redis.
Qual é a velocidade do Redis?
Todos podem saber que o Redis é rápido, mas quão rápido é o Redis? Por exemplo, qual é a velocidade da taxa de transferência do Redis? Acho que este não é um número específico que todos podem dizer.

O Redis fornece oficialmente um script de teste para testarmos a taxa de transferência do Redis.

redis-benchmark -q -n 100000 pode testar a taxa de transferência de comandos comumente usados.
redis-benchmark -t set, lpush -n 100000 -q Testa a taxa de transferência dos comandos set e lpush de processamento do Redis.
redis-benchmark -n 100000 -q script load "redis.call ('set', 'foo', 'bar')" Teste a taxa de transferência do Redis processando scripts Lua.
A figura a seguir é o resultado do autoteste do primeiro comando que executei aqui. Você pode ver que a taxa de transferência da maioria dos comandos pode chegar a mais de 40.000, o que significa que mais de 40.000 solicitações podem ser processadas por segundo:

Mas se você acha que essa é a taxa de transferência real do Redis, você está errado. Na verdade, os resultados do teste oficial do Redis podem atingir uma taxa de transferência de 100.000. A figura a seguir é um resultado de teste de referência oficial (a ordenada é a taxa de transferência e a abcissa é o número de conexões):


A questão de saber se o Redis é single-threaded ou multi-thread é mais clássica, porque na percepção de muitas pessoas, o Redis é single-threaded. No entanto, o Redis tem o conceito de multithreading desde a versão 4.0. Embora o módulo principal para processamento de solicitações de comando garanta a execução de thread único, já existem vários threads em muitos outros lugares, como a exclusão de objetos em segundo plano por meio do módulo Redis. Implemente comandos de bloqueio, gere arquivos de despejo e implemente multi-threading em E / S de rede na versão 6.0. No futuro, o Redis deve ter mais e mais módulos para implementar multi-threading.

O chamado single thread significa que quando o Redis processa solicitações do cliente (ou seja, executa comandos), ele é executado em um único thread, mas não significa que todo o Redis seja single threaded.

Por que o Redis escolheu usar thread único para executar solicitações
? Por que o Redis escolheu usar thread único? Isso ocorre porque não é comum a CPU se tornar o gargalo do Redis. Geralmente, é a memória ou a largura de banda da rede que se torna o gargalo do Redis. Por exemplo, usando o comando pipelining em um sistema Linux comum, o Redis pode completar 1 milhão de solicitações por segundo, portanto, se nosso aplicativo usa principalmente comandos O (N) ou O (log (N)) com complexidade, ele quase Não usará muita CPU.

Assim, uma vez que a CPU não se tornará um gargalo, é claro que não há necessidade de usar vários threads para executar comandos.Uma questão que precisamos esclarecer é que vários threads devem ser mais rápidos do que threads únicos? A resposta não é necessariamente. Como o multi-threading também tem um preço, os dois custos mais diretos são a criação e a destruição do thread (é claro, o pool de threads pode ser usado para reduzir a criação e destruição frequente até certo ponto) e a troca de contexto de thread.

Em nosso sistema diário, existem dois tipos principais: intensivo de CPU e intensivo de E / S.

Uso intensivo da CPU: este tipo de sistema significa que a utilização da CPU é muito alta, então o uso de multi-threading aumentará a troca de contexto e trará sobrecarga adicional, de modo que a eficiência do uso de multi-threading não pode aumentar, mas diminuir. Por exemplo: se você está trabalhando agora, tem feito uma coisa o tempo todo, leva 1 minuto para terminar, mas você é sempre interrompido no meio, e leva 1 segundo para andar até o lado para fazer Outra coisa, se essa tarefa também levar 1 minuto, então porque você alterna repetidamente para fazer duas coisas, levará 1 segundo para cada mudança, e o tempo para terminar essas duas coisas deve ser mais de 2 minutos (dependendo O número da troca no meio), mas se você não for interrompido no meio e terminar uma coisa e depois fazer outra, então você só precisa trocar uma vez, no máximo, ou seja, pode fazer em 2 minutos e 1 segundo.
IO intensivo: as operações de IO também podem ser divididas em operações como IO de disco e IO de rede. A maioria das operações de E / S é caracterizada por baixa utilização da CPU e demorada, portanto, a versão Redis 6.0 de E / S de rede será aprimorada para multithread. Quanto ao IO de disco, como os dados no Redis são armazenados na memória (e também podem ser persistentes), não envolve muitas operações de disco. Por exemplo: se você está regando uma muda agora, você precisa esperar que alguém lhe acrescente água depois de terminar de regar antes de continuar a regar, então se o processo de espera levar 5 segundos, ou seja, você termina de regar uma vez Você pode descansar por 5 segundos e, se mudar para fazer outra coisa, leva apenas 2 segundos para ir e voltar, então você pode fazer outra coisa primeiro e depois voltar depois de terminar, para que possa aproveitar ao máximo seus 5 segundos livres Hora do relógio, melhorando assim a eficiência.
O uso de multithreading também trará um problema é a segurança dos dados, então a programação multithread envolverá competição de bloqueio, o que também trará sobrecarga adicional.

O que é E / S Multiplexação
E / S se refere a E / S de rede, multiplexação se refere a várias conexões TCP (como Socket) e multiplexação se refere à multiplexação de um ou mais threads. O princípio básico da multiplexação de E / S é não permitir que o aplicativo monitore a conexão em si, mas sim que o núcleo do servidor monitore o aplicativo para o aplicativo.

No Redis, existem várias implementações de multiplexação, como select, epoll, evport, kqueue, etc.

Vamos usar o exemplo de ir a um restaurante para jantar para explicar o mecanismo de multiplexação de E / S (o solicitante é equivalente ao cliente, a cozinha do restaurante é equivalente ao servidor e o chef é o segmento).

Bloqueando IO: Zhang San foi ao restaurante para comer e pediu um prato. Nesse momento, ele não fez nada. Ele apenas ficou esperando. Quando o chef terminou de cozinhar, ele pegou os pratos e começou a comer. Ou seja, antes de os pratos serem fritos, Zhang San é bloqueado, isso é BIO (bloqueio IO), a eficiência será muito baixa.
IO sem bloqueio: Zhang San foi ao restaurante para comer e pediu um prato. Nesse momento, Zhang San não esperava o tempo todo. Ele encontrou um lugar para se sentar, escovar o vibrato, fazer ligações, fazer outras coisas e depois todos os outros segmentos É só ir até a cozinha perguntar se seus pratos estão prontos. Este é um IO sem bloqueio. Embora esse método possa melhorar o desempenho, se uma grande quantidade de IO for sondada regularmente, isso também causará uma sobrecarga muito grande no servidor.
Mecanismo orientado a eventos: Zhang San foi ao restaurante para comer e pediu um prato. Nesse momento, ele encontrou um lugar para sentar e esperar: quando o
prato na cozinha estiver pronto, o prato será trazido, mas eu não sei quem é o prato. Sim, perguntei aos clientes um por um. Este é o modelo selecionado em multiplexação, mas o modelo selecionado só pode monitorar 1024 soquetes (o modelo de votação resolve esta limitação).
Quando a cozinha estiver pronta põe a louça diretamente na janela, grita, fulano e tal a louça está pronta, quem vem buscar rápido, aí quem ouve o aviso vai buscar sozinha, isso é multiplexar Modelo Epoll em.
Deve-se notar que no mecanismo de multiplexação de IO, o cliente pode bloquear ou optar por não bloquear (bloqueando IO na maioria dos cenários). Isso precisa ser analisado em detalhes, mas no mecanismo de multiplexação, o servidor É possível melhorar a eficiência da simultaneidade por meio de multithreading (no exemplo acima, vários chefs podem cozinhar ao mesmo tempo).

A aplicação de multiplexação de E / S no
servidor Redis Redis é um programa orientado a eventos.O servidor precisa processar dois tipos de eventos: eventos de arquivo e eventos de tempo.

Eventos de arquivo: a comunicação entre o servidor Redis e o cliente (ou outros servidores) gerará eventos de arquivo correspondentes e, em seguida, o servidor concluirá uma série de operações de comunicação monitorando e processando esses eventos.
Eventos com hora: algumas operações no Redis que precisam ser realizadas em um determinado tempo.
O processador de eventos de arquivo do Redis é executado em uma única thread e usa um programa de multiplexação de E / S para monitorar várias conexões de soquete ao mesmo tempo, o que melhora o desempenho enquanto mantém um design interno de thread único A simplicidade. A figura a seguir é um diagrama esquemático do manipulador de eventos de arquivo:

Embora o programa de multiplexação de E / S monitore várias conexões de Socket ao mesmo tempo, ele colocará os Sockets monitorados em uma fila e, em seguida, enviará os eventos correspondentes a cada Socket para a fila de maneira ordenada por meio dessa fila. O despachante de eventos de arquivo é então despachado pelo despachante de eventos de arquivo para o tratador de evento correspondente para processamento. Somente depois que o evento correspondente a um Socket é processado, o programa de multiplexação de E / S continuará para o despachante de eventos de arquivo O envio do evento correspondente ao próximo Socket também pode verificar as conclusões acima.O pedido de comando do cliente é processado um a um em uma única thread, mas não há apenas um thread no manipulador de eventos.

Por que o
Redis é tão rápido? As razões pelas quais o Redis é tão rápido já foram basicamente mencionados. Agora vamos resumir:

1. Redis é uma estrutura de memória pura, o que evita operações demoradas, como E / S de disco.
2. O módulo principal do processamento de comando do Redis é de thread único, o que reduz a contenção de bloqueio e o custo da criação e destruição frequente de thread e reduz o consumo de troca de contexto de thread.
3. O mecanismo de multiplexação de E / S é adotado, o que melhora muito a eficiência da simultaneidade.

Acho que você gosta

Origin blog.csdn.net/gumenghua_com1/article/details/112390495
Recomendado
Clasificación