QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1225|回复: 9

X的瓶颈究竟在那的一点猜测,欢迎讨论

[复制链接]
发表于 2004-11-9 10:39:50 | 显示全部楼层 |阅读模式
X比Windows执行要慢,很多人都归咎于一个是运行在普通用户级,一个运行在内核级。除此之外,我认为还有一个问题,就是X本身体系的问题。

例如使用gtk创建一个button。完成一个按健处理在X下可能就是这样。

1 mouse移入button的窗口区,按下左键。一个中断发到内核。
2 内核把处理交到X服务器,发生了一次进程切换。
3 X服务器进行一些判断处理,通过socket发送一个事件给X客户程序,进程切换。
4 X客户程序接收事件,发出绘制按钮按下的样子的绘图指令,进程切换。

由上面,仅仅按一下mouse按钮,为了处理一个button被按下的样子,总共发生了3次进程切换。同样的,例如实现cursor移入某些控件时加亮的处理,也要进行类似的三次进程切换。由于linux是一个分时系统,并不一定会因为突发事件而迅速切换到相应的处理进程去,因此,在上面这个过程中,使用者就能感觉到X下桌面程序有种不明显的滞后感,而没有使用WINDOWS时的那种顺畅感。

欢迎大家指正。
发表于 2004-11-9 12:18:10 | 显示全部楼层
有同感,在X下,点击后,与WIN下比较,总觉得会慢一点
回复

使用道具 举报

发表于 2004-11-11 12:01:42 | 显示全部楼层
你用的是gtk
你直接用X试试
一点都不慢
回复

使用道具 举报

 楼主| 发表于 2004-11-11 16:22:33 | 显示全部楼层
[quote:8386f4e079="suowei1979"]你用的是gtk
你直接用X试试
一点都不慢[/quote]

我只是为了说明一个带有动画效果的button内部是如何消耗资源的,说gtk只不过是个例子而已。

呵呵,不知道你说的直接用X是什么意思,我不知道那个不是最终发的X指令?或者你想告诉我TWM没有什么画面效果,所以快?亦或者你要说高手是不用gtk,qt的,直接用xlib?
回复

使用道具 举报

发表于 2004-11-18 20:05:12 | 显示全部楼层
有没有人想过要改进X呢?
回复

使用道具 举报

发表于 2004-11-19 19:33:28 | 显示全部楼层
既然是C/S模式,可否让Client直接来处理用户界面(如鼠标,键盘,绘图),让Client于server和kernel的交互很少,client和sever甚至kernel根本就不交换与鼠标和键盘有关的事,server/kernel只响应client的事务请求,这样不可以么?
回复

使用道具 举报

发表于 2004-11-20 00:02:48 | 显示全部楼层

Re: X的瓶颈究竟在那的一点猜测,欢迎讨论

[quote:3cfaeb9e37="kakuyou"]X比Windows执行要慢,很多人都归咎于一个是运行在普通用户级,一个运行在内核级。除此之外,我认为还有一个问题,就是X本身体系的问题。

例如使用gtk创建一个button。完成一个按健处理在X下可能就是这样。

1 mouse移入button的窗口区,按下左键。一个中断发到内核。
2 内核把处理交到X服务器,发生了一次进程切换。
3 X服务器进行一些判断处理,通过socket发送一个事件给X客户程序,进程切换。
4 X客户程序接收事件,发出绘制按钮按下的样子的绘图指令,进程切换。

由上面,仅仅按一下mouse按钮,为了处理一个button被按下的样子,总共发生了3次进程切换。同样的,例如实现cursor移入某些控件时加亮的处理,也要进行类似的三次进程切换。由于linux是一个分时系统,并不一定会因为突发事件而迅速切换到相应的处理进程去,因此,在上面这个过程中,使用者就能感觉到X下桌面程序有种不明显的滞后感,而没有使用WINDOWS时的那种顺畅感。

欢迎大家指正。[/quote]

X是靠网络协议通讯的,通过X server与X client的通讯还有一个编码解码的过程。

发事件给客户端是一次编码解码,按钮按下的绘图可能就不止一次编码解码的过程了。
回复

使用道具 举报

发表于 2004-11-27 17:24:07 | 显示全部楼层
听说 x-window在开发的时候是想让x本身做到与硬件没有关系……
不知道这是不是一个原因呢?
回复

使用道具 举报

发表于 2004-11-30 19:05:01 | 显示全部楼层
我觉得unix-linux的话可以考虑试试看, :-)
回复

使用道具 举报

发表于 2004-12-7 10:20:33 | 显示全部楼层
xWindows本来是分布式的(C/S),如果Client与server不在同一台机器上,用户界面处理都完全是由Client机器处理,与linux本身没有关系

如果Client与server在同一台机器上,用户界面处理必须由linux处理,所以性能上会有影响,
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-16 09:31 , Processed in 0.040803 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表