批评不能文不对题, 兼谈实时系统的故事 看看附在本文后面的我的一段原文和西岸的评论,就知道什么是批评文不对题。 这种一开口就是别人什么都不懂的底气不知道从那里来的。我在学校和产业界都从来没有见过。 我的原文是参与同学们关于有多少个用户能同时连接上服务器的讨论。 这个问题胖球也指出是与硬件有关。 秦川也提出线程的问题,后面做服务的可以是多线程或多进程。 我就来跟具体回答一下这是怎么工作的。 并不是在讲Client-server 模式理论。 这个问题也跟Client-server 模式理论无关。 这跟系统资源有关。 任何所谓的server 都要工作在一定的OS上。 为什么要有多线程,用一个线程管理一个连接, 一个原因就是不能让一个用户抱紧你的CPU。 既然用多线程,那么同时用户的总数量仅仅因为同时线程总数有限制就会跟着有限制。 其他资源限制姑且不谈。 再谈一下实时系统。 这跟实际上跟要求实时到什么地步的具体要求有关。 而不只是一个理论问题。 我前面的文章谈到 wafer automation, 因为我多年以前曾经在应用材料公司 (世界上最大的半导体设备公司,INTEL这样的公司就是 是我们的客户) 做过 wafer fab automation。 这是我具体做过的最要求实时的系统。 这在工业界上也是最要求实时的系统之一。 时间上稍微有错误 wafer 就可能要坏了。 根据wafer 已经built上的处理器的情况,这个wafer有可能市场价值上百万美元。 大家自己查一下最贵的CPU一个多少钱和一个wafer能build 上多少个CPU就知道。 PC的CPU实际上是最便宜的CPU,因为需要量大。 当时WINDOW NT 刚出来,我们是第一次把WINDOW NT 用于automation。 WINDOW NT 严格来说,不是一个实时的OS,一个原因就是其多线程的操作。 你就是设定最高的 priority 给线程,系统依然可以把它暂停。 在上面的用户多连接的情况下,设定多个一样高priority 的线程。没有什么意义。 而且系统什么时候这样做是软件无法控制和预料的。 顺便说一下, JAVA 语言也不能用于很严格的实时系统,除非你做一些系统上的CODING。 但是,我们只是将NT 用在整个控制系统的管理上面,底层的机器手其实是用日本的, 日本的工业机器手当时世界第一。它的精确当时让我惊讶。 它带有自己基本动作的控制系统,我们再控制它做什么任务。 即使这样,我们还要做很多的研究和试验看看NT能不能用。 这你去光读什么理论也没有用的。 信息时代起飞实际上是从产业界开始的,学校落在后面。当然,学术界的长期的和基本的作用是不可以忽略的。 比如说数据库方面,就是理论和学校先于产业界, 这就另一个故事了。 MC的原文: 大家,大胖球,秦川,衣冠,etc. 说的都有点对。 一个服务器当然可以同时有多个用户连上来,但是数目是有限制的。具体跟系统资源有关。所以我说不用了要把让资源出来。 所谓同时的意思是,如果是单CPU的话,事情总是排队做。 即使是多线程 multi threads, 也是时间切片。 大家轮着做。一次只处理一个线程。 如果是多CPU的话,可能会几个线程一起处理,那CODING 有时比较麻烦。在单CPU机器上写好的多线程程序往往在多CPU机器上出错。 所以有段时间是多用户都连接在机器上, 一会处理你的任务一下,一会处理他的任务一下,而不是一个任务做完到一个任务。 就是在这段内用户是一直连着的等着任务完成。 随便考一下, 软件在PC上一般能开多少个线程? 为什么? 不许GOOGLE, 这是我常考学生的一个问题。 西岸的评论原文: 不知道所谓的client/server模式是怎么implement的,不知道server的通常都具有的结构,在server上是不存在什么“一会处理你的任务一下,一会处理他的任务一下”这种事的,这种分时处理是OS的功能,任何多任务操作系统都具备的基本功能,不是设计server需要考虑的。但server设计可以通过改变task priority的方式来分配机器资源。 |