Janelas, frames, servidores e clientes do Emacs: threads ou processos?

0

De link

Emacs server

Some people like to keep only a single instance of Emacs open and edit all their files in there. Doing this has a few advantages:

You can kill/yank text between buffers in the same instance of Emacs. Emacs remembers argument histories (what commands you've used, what files you've opened, terms you've searched for, etc.), but only within each instance. If you have many customizations, starting new instances of Emacs is slow. Alas, when you type emacs in a shell to edit a file (or when $EDITOR is invoked by an external program), a new instance of Emacs is started. You can avoid this by using emacsclient, which instead opens a new frame connected to an existing instance of Emacs:

In your existing instance of Emacs, type M-x server-start. Or add (server-start) to your .emacs file to make it do that automatically at startup. To edit a file, type emacsclient -t FILENAME at a prompt. You can also change your $EDITOR to emacsclient -t if you're using programs that automatically invoke $EDITOR. (emacsclient -t opens a new frame on the terminal; alternatively, emacsclient -c opens a new X frame.) When you're done editing, type C-x C-c, which closes the frame.

  1. Por uma "instância" do Emacs, é o mesmo que um processo do Emacs, ou um fio?
  2. São diferentes buffers (ou janelas ou quadros) sob o mesmo Emacs janela diferentes threads do processo emacs? (Eu acho que sim) Então faça eles se comunicam via memória compartilhada?
  3. São um servidor Emacs e seus clientes diferentes processos, ou o diferentes threads do mesmo processo do emacs? (Eu acho que não, mas o citar mesmo que um cliente é um quadro do servidor, e eu acho que um quadro é apenas um segmento do mesmo processo)
  4. Geralmente, no modelo servidor-cliente de um aplicativo, faça o servidor e os clientes são executados como processos ou threads diferentes? É o comunicação entre o servidor e os clientes feita pela memória compartilhada ou comunicação entre processos?
por Tim 04.08.2014 / 06:42

1 resposta

3

  1. Nesse contexto, uma "instância do Emacs" refere-se a um único processo.

  2. Não, o Emacs não mantém um thread para cada buffer aberto. Minha sessão atual tem 129 buffers abertos (cerca de 100 abertos a partir de arquivos, os outros sendo buffers de saída para determinados processos subordinados - python, ruby, interpretadores de elixir, pasta wanderlust e visualizações de resumo, flycheck-mode verificadores de sintaxe, etc.) mas apenas 3 ativos threads.

  3. O processo principal do Emacs é o servidor, e cada emacsclient é executado em seu próprio processo, comunicando-se com o servidor nos soquetes de domínio do UNIX. Quando o servidor recebe uma solicitação de conexão de um cliente, ele abre o arquivo solicitado em um novo buffer em uma nova janela no quadro do servidor. emacsclient tem a única função de enviar o arquivo solicitado para o servidor e aguardar o retorno do servidor assim que você terminar de editar o buffer do arquivo.

  4. Geralmente, os clientes e servidores são executados como processos separados - não há garantia de que o cliente e o servidor estejam na mesma rede, sem falar na mesma máquina. Alguns servidores iniciam um novo thread para lidar com cada conexão de entrada do cliente (o Apache pode ser construído para fazer isso, por exemplo), mas o cliente é um processo separado, possivelmente em outra máquina no outro lado do planeta. E note que a memória compartilhada é uma forma de comunicação entre processos, como são, por exemplo, soquetes de domínio UNIX.

por 04.08.2014 / 11:52