私が知る限り、すべてのコマンドラインシェルはマルチスレッドではありません。特に、「タスク制御」(Control-Z bg
、、など)をサポートするシェルもfg
機能(たとえばfork
、信号、パイプ、PTY)を介してexec
これを行います。糸。
Emacsは「同時に多くのことを行う」ことができますが、マルチスレッドではありません。 (再び、外部プログラムをたくさんフォークして実行し、信号、パイプ、PTYを使用してこれらの外部プログラムと通信します。)
私の質問は、X11プロトコル(X.org)の基本的な実装がサーバーまたはクライアントライブラリのUnixスレッドを使用することです。
それでは、おおよそいつから(またはその祖先であるXFree86またはXFree86の祖先)この仕事を始めましたか?
ベストアンサー1
$ ps -eLf
UID PID PPID LWP C NLWP STIME TTY TIME CMD
root 1 0 1 0 1 19:25 ? 00:00:00 init [4]
...
root 1699 1 1699 0 1 19:25 ? 00:00:00 /usr/bin/kdm
root 1701 1699 1701 8 2 19:25 tty10 00:13:10 /usr/bin/X :1 vt10 ...
root 1701 1699 1703 0 2 19:25 tty10 00:00:00 /usr/bin/X :1 vt10 ...
root 1706 1699 1706 0 1 19:25 ? 00:00:00 -:1
root 1707 1699 1707 0 2 19:25 tty9 00:00:02 /usr/bin/X :0 vt9 ...
root 1707 1699 1710 0 2 19:25 tty9 00:00:00 /usr/bin/X :0 vt9 ...
root 1713 1699 1713 0 1 19:25 ? 00:00:00 -:0
....
私はそれがあなたの質問に答えると思います。
それでも問題はいくつかを一緒に混ぜるようです。マルチスレッドはfork()
/を使用しませんexec()
。スレッドは同じアドレス空間を共有するので、異なるプロセスを実行したい場合は、同じアドレス空間にアクセスしたくないでしょう。外部プログラム(特に言及したシェル)を使用しないことにした場合は、すべての機能を再コーディングする必要があります。
マルチスレッドはすべての問題を解決するわけではありません。実際、これは主に並列性の問題のみを解決します。確認ウィキページ良い簡単な概要です。プログラムをマルチスレッドにしてもそれは良くなるわけではなく、ほとんどの場合、同期コード(存在する場合)のバグによって状態が悪くなります。