Pergunta

Ao usar tópicos eu às vezes visualizá-los como tecendo 3 ou mais dimensões interconexões entre objetos em um contexto espacial. Este não é um cenário geral de casos de uso, mas para o que eu faço é uma maneira útil de pensar sobre isso.

Existem APIs que utilizar que ajuda segmentação?

Você usou tópicos de uma maneira que não conceituar como fio sendo um processo?

Foi útil?

Solução

Existem APIs que você usa que enfiar ajuda?

Você appart média de java.util.concurrent? FunctionalJava tem algumas construções que ajudam na programação concorrente, conforme descrito em um multipart tutorial que começa aqui

Você usou tópicos de uma maneira que não conceituar como fio sendo um processo?

Sim, na medida em que tópicos não conceptualizar em tudo. Tome uma tarefa-runner assíncrona por exemplo. Ele usa tópicos sob as cobertas, mas eu não vê-los e eu não se preocupam com eles. Eles são totalmente gerenciado pela tarefa-runner.

Nos bastidores, é tudo apenas threads, mas quando parar de se importar sobre o thread individual e apenas pensar sobre eles como um número de slots onde você pode de alguma forma colocar o código e executá-lo por um período de tempo, em seguida, que é quando começamos a chegar a um nível maior de abstração.

Agentes / Actores é uma maneira comum de fazer isso. Um ator é como um fio que tem um pedaço de estado, e então você pode enviá-lo algum código e dizer "fazer isso para o seu estado, quando tiver tempo" ou algo nesse sentido.

Outras dicas

Primeiro de tudo

O aviso habitual: programação concorrente, em qualquer idioma, utilizando qualquer nível de abstração, é duro e complicadas e tem muitos riscos. Leve em consideração:

  • A programação simultânea complica qualquer aplicação de magnitude
  • Unidade de teste de seções críticas é difícil, e às vezes impossível
  • insetos Reproduzindo originários de código simultâneo é muito difícil e muito dependente de arquitetura, sabor OS, versão, etc ...

Java Concurrent APIs

Java passou um longo caminho a fazer programação concorrente o mais fácil possível para os desenvolvedores. Para a maioria dos casos, você vai ver que java.util.concurrent tem a maioria das abstrações que você vai precisar de:

  • Runnable interface e Thread objeto que você pode estender. Basta jogar em seu código e você tem um fio pronto para ser executado
  • Um conjunto agradável de Executors : piscina constante, piscina dinâmica, marcada, ou o que quer. Basta jogar um Runnable para ele e ele faz o resto.
  • Semaphores e fechaduras de todos os tipos aliviá-lo da necessidade de implementar técnicas de bloqueio comuns.
  • A built-in wait() e notify() API para todos os objetos.

Usos

A única coisa que resta para você, como o engenheiro de software, é garantir que você está escrevendo correta código. Ou seja, você deve estar ciente das situações perigosas que você pode estar expondo-se a:

  • Impasse -. Uma situação em que dois ou mais segmentos estão aguardando em recursos não-ordenadas, tornando um loop de espera infinita
  • Livelock - dois ou mais tópicos que educadamente tentam dar lugar para o outro em um recurso compartilhado, mas acabam por não tê-la (considerar duas pessoas em um corredor subindo uns aos outros e em constante movimento junto de lado a lado)
  • Fome -. Um único segmento tendo a maior parte ou a totalidade de um único recurso compartilhado, privando assim outras threads de acesso a ele

ponto principal (ou, quando usar)

Usar tópicos apenas quando a concorrência vai melhorar diretamente o seu comportamento aplicações.

Se você está esperando por um recurso IO / network / hardware-bound, DO gerar um segmento sobre ele para que você possa continuar a fazer outras coisas.

Se você está apenas tentando cálculos de CPU-bound elegantemente split, NÃO Use tópicos. Você só pode acabar piorando seu desempenho.

Se você não usar fios, certifique-se de ter cuidadosamente contemplados os riscos, e triple-marcada, você não perca nenhuma situações excepcionais.

útil (Online) Recursos

A maneira mais rápida de entrar em coisas é fazer a Sun concorrência tutorial . Fora isso, obter um bom livro.

Boa sorte:)

A concorrência é um tema profundo e complicado para a cobertura. Livros como Java Concurrency in Practice ajuda maio.

Concorrência Visão geral dos utilitários para APIs de threading. BlockingQueue pode ser útil, por exemplo.

A fila que suporta adicionalmente operações que esperam na fila para tornar-se não-vazia quando a recuperação de um elemento, e espera por espaço para se tornar disponível na fila ao armazenar um elemento.

CountDownLatch

A ajuda de sincronização que permite que um ou mais tópicos que esperar até que um conjunto de operações a ser realizadas em outros fios concluída.

CyclicBarrier por algum comportamento interessante.

A ajuda de sincronização que permite que um conjunto de tópicos a todos espera para cada outros para chegar a um ponto barreira comum.

Editar : Estou lendo Java Concurrency in Practice agora. É muito bom.

Ao usar tópicos eu às vezes visualizá-los como tecendo 3 ou mais dimensões interconexões entre objetos em um contexto espacial.

Isso soa complicado, como você conceptualizar 600 tópicos, por exemplo? Por que não pensar neles como vários threads de execução em execução, aparentemente, ao mesmo tempo.

Existem APIs que utilizar que ajuda segmentação?

Eu sugiro o mais simples e mais simples são os primeiros jogos que você iria encontrar. http://www.google.co.uk/search?q=java+ tópicos

Você usou tópicos de uma maneira que não conceituar como fio sendo um processo?

Desde tópicos não são processos, não posso dizer que eu já pensou em tópicos como processos. (Exceto em versões antigas do Linux) processos não compartilham memória / objetos por padrão para um começo, eles correm de forma totalmente independente (geralmente diferentes programas, possivelmente escrito em diferentes línguas) Eles são também começam de forma diferente usando diferentes APIs.

Há uma visão de que multi-threading é complicado. Na verdade, eu diria o contrário. Multi-threaded programação requer que você faça o seu código simples, fácil de entendido e em frente à razão sobre. Enquanto isso leva experiência, o seu objectivo é a simplicidade.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top