Emacs 창, 프레임, 서버 및 클라이언트: 스레드 또는 프로세스?

Emacs 창, 프레임, 서버 및 클라이언트: 스레드 또는 프로세스?

~에서http://www.gnu.org/software/emacs/tour/

이맥스 서버

어떤 사람들은 하나만 갖고 싶어합니다.Emacs는 그 안의 모든 파일을 열고 편집합니다. 여기에는 몇 가지 장점이 있습니다.

동일한 버퍼의 버퍼 간에 텍스트를 죽이거나 끌어올 수 있습니다.이맥스. Emacs는 인수 기록(사용한 명령, 열었던 파일, 검색한 용어 등)을 기억하지만 각 인수 기록에 대해서만 기억합니다.. 맞춤설정이 많은 경우 다시 시작하세요. 이맥스는 느립니다. 아쉽게도 파일을 편집하기 위해 쉘에 emacs를 입력할 때(또는 외부 프로그램이 $EDITOR를 호출할 때), 새로운이맥스를 시작하세요. emacsclient를 사용하면 이를 방지할 수 있습니다.액자기존에 연결이맥스:

기존의Emacs에서는 Mx server-start를 입력합니다. 또는 .emacs 파일에 (server-start)를 추가하면 시작 시 자동으로 이 작업이 수행됩니다. 파일을 편집하려면 프롬프트에 emacsclient -t FILENAME을 입력하십시오. $EDITOR를 자동으로 호출하는 프로그램을 사용하는 경우 $EDITOR를 emacsclient -t로 변경할 수도 있습니다. (emacsclient -t는 새 파일을 엽니다.액자또는 터미널에서 emacsclient -c가 새 X를 엽니다. 액자.) 편집이 끝나면 Cx Cc를 입력하면 닫힙니다. 액자.

  1. Emacs의 "인스턴스"는 Emacs 프로세스나 스레드와 동일합니까?
  2. 동일한 Emacs 창 아래의 다른 버퍼(또는 창, 프레임)가 Emacs 프로세스의 다른 스레드입니까? (그런 것 같아요) 그러면 공유 메모리를 통해 통신한다는 건가요?
  3. Emacs 서버와 해당 클라이언트는 다른 프로세스입니까, 아니면 동일한 Emacs 프로세스의 다른 스레드입니까? (아닌 것 같지만 동일하게 인용하면 클라이언트는 서버의 프레임입니다. 프레임은 동일한 프로세스의 스레드인 것 같습니다.)
  4. 일반적으로 애플리케이션의 서버-클라이언트 모델에서 서버와 클라이언트는 서로 다른 프로세스 또는 스레드로 실행됩니까? 서버와 클라이언트 간의 통신은 공유 메모리를 통해 이루어지나요, 아니면 프로세스 간 통신을 통해 이루어지나요?

답변1

  1. 이 글에서 "Emacs 인스턴스"는 단일 프로세스를 의미합니다.

  2. 아니요, Emacs는 열려 있는 버퍼마다 스레드를 예약하지 않습니다. 내 현재 세션에는 129개의 오픈 버퍼가 있습니다(약 100개는 파일에서 열려 있고 나머지는 일부 슬레이브 프로세스(Python, Ruby, elixir 인터프리터, Wanderlust 폴더 및 요약 보기, flycheck-mode구문 검사기 등)의 출력 버퍼입니다.). 그러나 활성 버퍼는 3개뿐입니다. 스레드.

  3. emacsclient주요 Emacs 프로세스는 각각 자체 프로세스에서 실행되고 UNIX 도메인 소켓을 통해 서버와 통신하는 서버입니다 . 서버가 클라이언트로부터 연결 요청을 받으면 서버 프레임의 새 창에서 새 버퍼에 있는 요청된 파일을 엽니다. emacsclient유일한 기능은 요청된 파일을 서버에 보내고 서버가 파일 버퍼 편집을 마쳤을 때 반환될 때까지 기다리는 것입니다.

  4. 일반적으로 클라이언트와 서버는 별도의 프로세스로 실행됩니다. 클라이언트와 서버가 동일한 시스템은 물론이고 동일한 네트워크에 있다는 보장도 없습니다. 일부 서버는 들어오는 각 클라이언트 연결을 처리하기 위해 새 스레드를 시작하지만(예를 들어 Apache는 이를 위해 구축될 수 있음) 클라이언트는 별도의 프로세스로, 아마도 지구 반대편에 있는 다른 시스템에 있을 수 있습니다. 그리고 공유 메모리에 주목하세요UNIX 도메인 소켓과 같은 프로세스 간 통신의 한 형태입니다.

관련 정보