Emacsウィンドウ、フレーム、サーバー、クライアント:スレッドまたはプロセス?

Emacsウィンドウ、フレーム、サーバー、クライアント:スレッドまたはプロセス?

~からhttp://www.gnu.org/software/emacs/tour/

Emacsサーバー

一部の人は1つだけをしたいです。はいEmacsはその中のすべてのファイルを開いて編集します。これにはいくつかの利点があります。

同じバッファ内のバッファ間でテキストを殺したりドラッグしたりできます。はいEmacs。 Emacsは引数履歴(使用したコマンド、開いたファイル、検索した用語など)を覚えていますが、各引数履歴についてのみ覚えています。はい。カスタマイズが多い場合は再起動してください。はい Emacsは遅いです。残念ながら、ファイルを編集するためにシェルにemacsを入力した場合(または外部プログラムが$ EDITORを呼び出すとき)、はいEmacsを始めましょう。 emacsclientを使用すると、これを防ぐことができます。額縁既存の接続はいEmacs:

既存のはい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 ドメインソケットなどのプロセス間通信の一形態です。

おすすめ記事