¿Alguna parte del software X.org es multiprocess?

Ninguno de los shells de command-line de los que tengo conocimiento son multiprocess. En particular, incluso aquellos shells que admiten "control de trabajo" (Control-Z, bg , fg , etc.) lo hacen a través de las instalaciones (es decir, fork , exec , señales, pipes y PTY) que son anteriores a los subprocesss de Unix.

Tampoco es Emacs multiprocess a pesar de que es capaz de "hacer muchas cosas al mismo time". (Nuevamente, bifurca y ejecuta muchos progtwigs externos y usa señales, pipes y PTY para comunicarse con esos progtwigs externos).

Mi pregunta es, ¿la implementación dominante del protocolo X11 (X.org) usa subprocesss de Unix, ya sea en el server o en cualquiera de las bibliotecas del cliente?

Si es así, ¿aproximadamente cuándo comenzó (o su ancestro, XFree86 o antecesor de XFree86) a hacerlo?

 $ 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 .... 

responde tu pregunta, creo.

Sin embargo, la pregunta parece ser mezclar varias cosas juntas: el multihilo no se trata de no usar fork() / exec() . Los subprocesss comparten el mismo espacio de direcciones y si desea ejecutar un process diferente, ciertamente no desea que tenga acceso al mismo espacio de direcciones. Y si decidió no utilizar progtwigs externos (especialmente en el intérprete de commands que ya lo mencionó), tendría que volver a codificar todas las funciones.

Multithreading no es una cura para todo. En realidad, puede ser solo una cura para problemas bien paralelizables en realidad: consulte la página wiki para get una breve descripción general. Hacer un progtwig multiprocess no lo mejora, en la mayoría de los casos lo empeora debido a los errores en el código de synchronization (si está presente).

en el libro de ES Raymond, el autor cita.

El server X, capaz de ejecutar literalmente millones de operaciones / segundo, no está enhebrado; usa un bucle de encuesta / selección. Varios esfuerzos para hacer una implementación multiprocess no han tenido buenos resultados. Los costos de locking y deslocking son demasiado altos para algo tan sensible al performance como los serveres de charts. – Jim Gettys

Tal como lo entiendo, nada acerca de X11 en sí mismo impide a los clientes con subprocesss múltiples, es solo que Xlib tiene algunas condiciones de carrera que simplemente no pueden ser eliminadas. Lo tomo de XCB , no lo sé por experiencia. XCB es una biblioteca de capa Xlib diseñada para ser utilizada con clientes multiprocess. Por lo tanto, parece que los clientes X11 tienden a escribirse como progtwigs basados ​​en events, casi en time real, simplemente porque. No hay razón para no hacer clientes con hilos.