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.
- Por uma "instância" do Emacs, é o mesmo que um processo do Emacs, ou um
fio?
- 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?
- 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)
- 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
-
Nesse contexto, uma "instância do Emacs" refere-se a um único processo.
-
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.
-
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.
-
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