16 Mar
Para deixar um sistema mais rápido (e muitas vezes mais “macio”) é necessário que você execute várias coisas ao mesmo tempo. Você não precisa fazer com que seu programa simplesmente pare de fazer algo simplesmente porque o usuário clicou em outro botão. Você também pode estar querendo aproveitar um segundo processador da máquina ou mesmo aumentar o número de acessos ao processador (é difícil fazer um jogo rodar quando o Windows come metade do sistema e o anti-vírus mastiga o resto). O que fazer então? Bom, você poderia pedir pro usuário fechar o anti-vírus (o que ele não vai fazer) ou mandar ele apelar pro bom senso e desligar o tocador de mp3, Word, Messenger, Internet Explorer e todas as tranqueiras que ele tem em stand-by para então rodar o seu programa. Esquece… Isso não vai acontecer. O que nós programadores podemos fazer, então? Simples. Podemos dividir o nosso programa em várias threads e aumentar a prioridade delas, aumentando o nosso acesso ao(s) processador(es) e diminuindo o dos outros programas. Mas vamos com calma.
Uma thread é basicamente um outro programa rodando mas que tem os mesmos direitos de acesso à memória que o programa que carrega ela (que seria a thread principal). Esta não é a definição formal. É mais uma utilidade prática do negócio. Como ele tem os mesmos direitos de acesso à memória, compartilhar dados entre os dois programas é fácil. E cada um tem sua própria pilha, então nem precisa se preocupar com um eventual estouro dela (não abusem dessa frase, é possível estourar a pilha, apenas menos provável).
C não possui nenhum suporte nativo à threads (isso é algo que depende muito do kernel do sistema operacional, pois é ele quem coordena os processos - entenda como threads + programas - e verifica quando estes vão pro processador e para qual processador vão). Então é necessário que você utilize uma biblioteca do sistema operacional.
O Windows utiliza o header windows.h (sugestivo, não?), mas qualquer coisa que você compile que tenha incluído esse header irá demorar milênios para compilar, pois esse header é realmente imenso. Para evitar isso, defina a constante WIN32_LEAN_AND_MEAN antes de incluir o header e assim você evitará incluir um monte de coisas nas quais você provavelmente não está interessado.
Linux e MacOS X utilizam a pthread.h. MacOS Clássico não possui suporte nativo, mas difícilmente você irá produzir uma aplicação pra clássico hoje em dia.
Mas e se eu quiser produzir uma aplicação portável entre alguns desses sistemas, o que que eu faço? Vou ter que forçar a portabilidade “no braço” com #ifdef ? Não. Você pode usar uma das seguintes bibliotecas:
Mas antes que você pense que threads são a solução para todos os problemas, tome cuidado. Thread é uma ferramenta poderosa, mas é bem complicado de utilizá-la. Recomendo que estude seriamente programação concorrente antes de se aventurar pelos incontáveis erros de sincronismo praticamente indetectáveis que as threads produzem.
Próxima semana: Ponteiros e Aritmética de Ponteiros.
Posts Relacionados:
15 Mar
Esta é a primeira parte de um guia que pretende mostrar como instalar uma distribuição Linux em sua máquina, possibilitando que você tenha um sistema completamente funcional, com todas as ferramentas que você pode precisar e sem nenhum custo, exceto, talvez algumas horas de aprendizado.
Esse guia não tem o objetivo de ser um tutorial, pois já existem muitas páginas de como instalar o Linux em sua máquina. Ele é na verdade um roadmap (mapa de estrada) que tem como objetivo indicar referências para as informações necessárias para a instalação de um sistema open-source funcional. Todos os passos desse guia serão executados na mesma máquina com a mesma instalação, e portanto, conforme o guia se desenvolver o sistema também melhorará.
Todos os problemas ocorridos por causa de Hardware, configuração, falta de atualização dos tutoriais utilizados, etc, serão abordados. Nem sempre a solução de um problema será igual para todos, e nem sempre exisitirá essa solução. Mas todos os problemas serão mencionados e suas possiveis correções.
A distribuição a ser usada será o Gentoo (http://www.gentoo.org/) por simples preferência pessoal. Ela é considerada uma distribuição forte, porém díficil. Eu não vejo dessa forma, a instalação com o LiveCD é feita facilmente e a instalação manual requer apenas a leitura do manual. Para instalação de softwares ela utiliza o Portage, acessado pelo comando emerge que permite a fácil instalação da maior parte dos aplicativos. Aqui surge uma diferença, na minha opinião, fundamental: os softwares instalados com o emerge são compilados na sua máquina, possibilitando assim uma alta performace. Muitos gerenciadores de pacotes trabalham principalmente com arquivos já compilados, feitos para sistemas genéricos, e portanto, não otimizados para o seu sitema.
Instalando o Sistema
1. Baixando a distribuição: Em http://www.gentoo.org/main/en/where.xml você encontra as opções de download para várias plataformas. Os usuários de computadores PC de 32 bits devem escolher uma imagem para x86, os usuários com processadores 64 bits devem escolher amd64 (mesmo que seu processador seja Intel). Você tem agora duas opções, com suas vantagens e desvantagens:
Eu particulamente uso o Minimal, já fiz algumas instalações com o LiveCD quando estava com problemas com o modo gráfico. Se tiver tempo e paciência use a Minimal, se não tiver nenhum dos dois ou for um iniciante em Linux e estiver inseguro use o LiveCD. Mais sobre as diferenças em http://www.gentoo.org/doc/pt_br/handbook/handbook-x86.xml?part=1&chap=2
Manual de Instalação - Minimal:
Manual de Instalação - LiveCD:
Dicas:
Problemas:
Se você optou pelo LiveCD, você tem agora uma instalação quase completamente funcional. Se você escolheu o minimal, deve ainda instalar o ambiente gráfico. Outros itens de hardware também devem ser instalados, como placa de som, placa wireless (possivelmente), etc. Algumas coisas também precisam ser configuradas. Na próxima parte do guia irei abordar esses assuntos. Uma coisa interessante agora seria usar o emerge –update world para atualizar o seu sistema (isso pode fazer seu sistema quebrar se você usou o LiveCD).
Posts Relacionados:
15 Mar
O blog Nomadishere publicou um post com as oito coisas que todo geek, nerd ou pessoa criativa precisa pra produzir mais no trabalho.
Uma versão adaptada em português pode ser encontrada aqui.
Posts Relacionados:
14 Mar
O blog Na Mira do Linux publicou diversas coisas que podem ser compradas com o dinheiro que você gastaria na edição Home do Windows Vista. Vale a pena conferir.
Posts Relacionados: