提出这个问题,源于我遇到的一些项目。
至少有四个原因说明讨论这个问题的必要性:
一、就应用型软件来讲,支持大量并发访问的服务器软件是一个重要方面。其它还包括数据库MIS软件、数据采集处理软件、基于WEB的程序等。每种软件有自己的规律,但就难度来讲,并发访问服务器软件的难度与价值都要大一些。例如目前的OICQ、联众游戏等,都存在这个问题。
二、从技术本身来讲,可以分为技巧型(如在非客户区画图)、大系统结构型(如大型MIS系统)、高性能型(如本话题)三种,目前网上的大多文章停留在技巧上,或者停留在某种功能如何实现等教学性质的讲座上,或者一些复用性并不强的源码上。我个人认为教学本身的有用,但价值不大,比如如何进行多线程编程、如果进行SOCKET通讯等,一些经典的图书、手册、MSDN等来得更好;而技巧型价值也不大,多是一些点缀,不是大系统中的关键;大多数源码的价值也不大,不如系统自带的例程好。 实际上,对大系统结构型和高性能型软件的讨论太少,此为其二。
三、在互联网大势已定的今天,基于HTTP协议软件或者网站的作用不需要多说,另一种基于专用客户端软件、后台有服务器软件提供并发服务(不论两层、三层还是多层)、通过互联网进行通讯的大规模分布式应用显然是我辈程序员的一个弱项。值得我们关注和努力。
四、我想好的程序员都研究过数据结构、钻研过操作系统源码、学习过编译原理,或者进行过底层的通讯研究。如果让我们写一个网络数据库系统(DBMS),如果让你规划,你可能能说出个大概,但高性能的支持大量用户并发访问的服务器软件还是一个很少有人有底气的问题。
就我目前知道的一些情况,有以下基本结论:
1、在NT或者LINUX/UNIX系统中,好的服务器软件可以支持1000——3000并发联接。
2、目前分布式操作系统还只是个概念,但不排除可以在应用程序上写出好的分布式应用程序来。
3、缺少历经实战检验的成形的写作方法。