O que significa o termo 'bloco'?

5

O que o termo bloco significa para a ciência da computação? Eu vi isso sendo usado em várias ocasiões, mas nunca entendi o que isso significa. Como bloquear o I / O? Googling não parece me ajudar muito.

    
por Alfred 16.10.2010 / 20:38

5 respostas

9

O bloqueio de E / S significa que o programa basicamente pergunta "Obtenha esses dados, esperarei até que estejam prontos". Isso está em contraste com a E / S sem bloqueio. Existem dois tipos: "Leve-me estes dados, vou fazer outra coisa. Interrompa-me quando os dados estiverem prontos.", E "Leve-me estes dados, vou fazer outra coisa. Eu ' Eu lhe perguntarei mais tarde se você tem isto ainda. "

É importante porque, se um programa bloquear enquanto aguarda dados, não poderá fazer coisas como responder a cliques do mouse ou redesenhar a tela. Isso é o que acontece quando você vê um programa rotulado como "Não está respondendo" no gerenciador de tarefas.

    
por 16.10.2010 / 21:47
0

Em resumo, isso significa que o processo trava (aguarda) até que a E / S seja concluída. Este artigo da Wikipédia o aborda de passagem, focando na E / S sem bloqueio:

(blocking I/O would) block the progress of a program while the communication is in progress, leaving system resources idle. When a program makes many I/O operations, this means that the processor can spend almost all of its time idle waiting for I/O operations to complete

É claro que a E / S sem bloqueio não ajuda muito se o próximo passo é fazer algo com esses dados.

    
por 16.10.2010 / 21:13
0

O bloqueio é a maneira mais simples e óbvia de se mover:

bytes = socket.read();  // Thread "blocks" or waits if there's nothing to read
doSomethingWith(bytes);

Você não pode fazer um two-liner com non-blocking, pois envolve configurar objetos para cada conexão, que são então alimentados por um único "multiplexor" que constantemente procura a próxima coisa que vem. Imagine como as duas abordagens são diferentes com mil ou um milhão de conexões. Você escolhe um ou outro por causa de fatores como:

  • Número de conexões simultâneas para suportar
  • Tempo médio de resposta visto por um cliente individual
  • Taxa de transferência total do servidor para todos os clientes

Por exemplo, você pode ter um problema com bloqueio de E / S mantendo milhares de conexões abertas, uma com cada thread, porque seu sistema não gosta de ter vários milhares de threads. Mas acaba por ser uma questão bastante complexa. Leia sobre como a percepção flip-flop com Java , incluindo a apresentação de slides vinculada (PDF).

    
por 16.10.2010 / 21:52
0

Além de indicar uma forma de sinalização síncrona , em um contexto de programação, 'block' também pode significar uma seção de código agrupada .

    
por 17.10.2010 / 02:51
0

O primeiro significado de bloco é fácil na ciência da computação: um bloco de código-fonte em uma linguagem de computador. Para C / C ++, perl, etc. o chaveiro {um bloco de código; } delimita um bloco de código. Python usa recuo para blocos.

O segundo significado é usado no contexto do sistema operacional (normalmente chamado de kernel) que é visto como o gerente supremo que gerencia os recursos. Quando processos ou encadeamentos diferentes solicitam recursos (por meio de chamadas do sistema) (CPU, disco, rede, memória, ...) eo recurso pode não estar disponível devido a vários encadeamentos ou processos concorrentes estarem solicitando a mesma coisa. O kernel colocará alguns processos ou threads em suspensão (fila de espera) e permitirá apenas alguns processos ou threads trabalhando nos recursos (estado de execução). Os processos suspensos estão no estado de bloqueio ou estão bloqueados.

O bloqueio pode ser obtido através de mecanismos de hardware ou software pelo sistema operacional. O processo em execução também pode solicitar que o sistema operacional suspenda sua execução pelo comando sleep como em Shell e perl.

Por favor edite se a minha interpretação estiver errada.

    
por 07.06.2017 / 22:50

Tags