Estão enfiando questões para C / C ++ “programadores de nível de sistema” significativamente diferentes daqueles enfrentados por programadores Java?

StackOverflow https://stackoverflow.com/questions/641514

Pergunta

Eu estou procurando um trabalho de desenvolvimento e ver que muitas listas especificar que os desenvolvedores devem ser versados ??em multithreading. Isto parece tanto para listas de trabalho Java e para listagens de C ++ que envolvem "programação do sistema" no UNIX.

Nos últimos anos, tenho vindo a trabalhar com Java e usando seus vários mecanismos de sincronização.

No final dos anos 90 eu fiz um monte de trabalho C ++, embora muito pouco threads. Na faculdade, no entanto, usamos tópicos no Solaris.

A minha pergunta é se há diferenças significativas nos problemas que os desenvolvedores em rosto C / C ++ em comparação com os desenvolvedores em Java, e se qualquer uma das técnicas para resolvê-los são fundamentalmente diferentes. Java inclui, obviamente, alguns mecanismos mais agradáveis ??e versões sincronizados de coleções, etc.

Se eu quiser atualizar ou enfiar reaprender no UNIX, qual é a melhor abordagem? Qual biblioteca eu deveria olhar? etc. Existe alguma grande tutorial atuais sobre tópicos em c ++?

Foi útil?

Solução

Os desafios fundamentais de segmentação (por exemplo, sincronização, condições de corrida, comunicação inter-thread, limpeza de recursos), mas Java faz fio muito mais gerenciável com coleta de lixo, exceções, objetos de sincronização avançadas, suporte a depuração avançado com reflexão.

Com C ++, você é muito mais propensos a ter corrupção de memória e condições de corrida "impossíveis". E você terá que escrever muito mais primitivas fio de baixo nível ou depender de bibliotecas (como impulso) que não fazem parte da linguagem padronizada.

Outras dicas

C ++ é realmente aeasier escrever código rosca complexo do que Java, porque ele tem um recurso Java carece - RAII ou "aquisição de recurso é inicialização". Esta expressão é usada para todos todo o controle de recursos em código C ++ bem escrito, mas é particularmente apropriado no código multi-thread onde a gestão automática de sincronização é uma obrigação.

pthreads e boost (os pthreads foi um lijnk aleatória, mas parece ok como um ponto de partida).

Em um alto nível as questões para Java / C / C ++ / são os mesmos. Os detalhes sobre como você resolver o problema (funções de chamada, classes para criar, etc ...) variam língua para língua.

A coleta de lixo faz tópicos que não vazamento de memória mais fácil de programação, e há fantasia coisas você pode fazer para resolver o calendário das coleções.

destruidores determinísticos fazem tópicos que fazem zumbis não desova mais fácil programação, consulte papel ACM aqui

Depende do que o nível que você escolher para trabalhar. Intel TBB e OpenMP lidar com um monte de casos comuns de um nível elevado bonita. threads POSIX, o Windows APIs e bibliotecas portáteis como tópicos impulso aproximá-lo ao mesmo nível como primitivos em Java.

C ++ 0x enfiando (especialmente com barreiras adquirir e memória release) permitem que você vá para um nível ainda mais baixo para mais controle e complexidade de ofertas Java (marcando uma volatile variável em Java dá tanto uma aquisição e uma memória de liberação barreira, mas em Java você não pode pedir apenas o adquirir ou apenas a barreira de libertação;. onde em C ++ 0x você pode)

Por favor note que modelo de segmentação de C ++ 0x é intencionalmente baixo nível com a esperança de que as pessoas vão construir coisas como TBB em cima dela e da próxima vez que o comitê de padrões atende eles vão ser capazes de descobrir qual daqueles maior bibliotecas e ferramentas de nível funcionam bem o suficiente para aprender.

Independentemente da linguagem de programação usos, a idiossincrasia de fio são comuns. Por exemplo, mesmo em todo OS as threads POSIX e tópicos Win32 têm mesmo conjunto de idiossincrasias lógicas, embora as chamadas de API e WRT implementação nativa subjacente hardware / kernel pode mudar, mas para programadores de sistema do pensamento lógico sobre tópicos e como fazê-los funcionar como esperado e em alcançar esta é a parte mais mais difícil. Isto é verdade mesmo quando chegar a linguagens de programação. Se você realmente entender o conceito de sincronização de threading & tópico que você é bom para ir e usá-los em qualquer linguagem de programação que você gosta. Uma vez que estas linguagens de programação fornecem açúcares sintáticos em cima da execução de sincronização de thread / thread nativa.

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