Alguma parte do software X.org é multithreaded?

2

Nenhum dos shells de linha de comando que conheço é multithread. Em particular, até mesmo os shells que suportam "controle de tarefa" (Control-Z, bg , fg , etc) o fazem por meio de recursos (ou seja, fork , exec , sinais, pipes e PTYs) anteriores Unix threads .

O Emacs também não é multithreaded, embora seja capaz de "fazer muitas coisas ao mesmo tempo". (Novamente, ele bifurca e executa muito programas externos e usa sinais, canais e PTYs para se comunicar com esses programas externos.)

Minha pergunta é: a implementação dominante do protocolo X11 (X.org) usa encadeamentos Unix - no servidor ou em qualquer uma das bibliotecas do cliente?

Se sim, aproximadamente quando ele (ou seu antepassado, XFree86 ou antepassado do XFree86) começou a fazê-lo?

    
por hruvulum 06.06.2013 / 17:21

3 respostas

3
$ 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 a sua pergunta, eu acho.

No entanto, a questão parece estar misturando várias coisas - multithreading não é sobre não usar fork() / exec() . Os segmentos compartilham o mesmo espaço de endereço e, se você quiser executar um processo diferente, certamente não deseja que ele tenha acesso ao mesmo espaço de endereço. E se você decidiu não usar programas externos (especialmente no shell que você mencionou), você teria que codificar toda a funcionalidade novamente.

O multithreading não é uma cura para tudo. Na maioria das vezes, pode ser uma cura apenas para problemas bem paralisáveis - verifique a página wiki para obter um breve resumo visão global. Tornar um programa multithreaded não o torna melhor, na maioria dos casos ele piora devido aos bugs no código de sincronização (se estiver presente).

    
por 06.06.2013 / 22:09
2

no livro de E. S. Raymond, o autor cita.

The X server, able to execute literally millions of ops/second, is not threaded; it uses a poll/select loop. Various efforts to make a multithreaded implementation have come to no good result. The costs of locking and unlocking get too high for something as performance-sensitive as graphics servers. -- Jim Gettys

    
por 31.01.2015 / 12:44
1

Pelo que entendi, nada sobre o X11 em si impede clientes multi-threaded, é apenas que o Xlib tem algumas condições de corrida que simplesmente não podem ser eliminadas. Estou tirando isso de XCB , não sei por experiência. XCB é uma biblioteca de camadas Xlib projetada para ser usada com clientes multi-threaded. Então, parece que os clientes do X11 tendem a ser escritos como programas orientados a eventos, quase em tempo real, apenas porque. Não há motivos para não fazer clientes encadeados.

    
por 06.06.2013 / 20:36