C#线程系列讲座(3):线程池和文件下载服务器
2016-11-02 09:50
253 查看
如果设计一个服务器程序,每当处理用户请求时,都开始一个线程,将会在一定程序上消耗服务器的资源。为此,一个最好的解决方法就是在服务器启动之前,事先创建一些线程对象,然后,当处理客户端请求时,就从这些建好的线程中获得线程对象,并处理请求。保存这些线程对象的结构就叫做线程池。
在C#中可以通过System.Threading.ThreadPool类来实现,在默认情况下,ThreadPool最大可建立500个工作线程和1000个I/O线程(根据机器CPU个数和.net
framework版本的不同,这些数据可能会有变化)。下面是一个用C#从线程池获得线程的例子:
下图为上面代码的运行结果。
要注意的是,使用ThreadPool获得的线程都是后台线程。
下面的程序是我设计的一个下载文件服务器的例子。这个例子从ThreadPool获得线程,并处理相应的客户端请求。
FileServer类的使用方法:
FileServer fs = new FileServer(“d:\\download”);
fs.start(); // 端口为1234
如果d:"download目录中有一个叫aa.exe的文件,在浏览器中输入如下的地址可下载:
http://localhost:1234/aa.exe 下图为下载对话框:
要注意的是,本程序并没有处理含有中文和其他特殊字符(如空格)的url,因为,文件名要为英文名(不能有空格等特殊字符)。
如果设计一个服务器程序,每当处理用户请求时,都开始一个线程,将会在一定程序上消耗服务器的资源。为此,一个最好的解决方法就是在服务器启动之前,事先创建一些线程对象,然后,当处理客户端请求时,就从这些建好的线程中获得线程对象,并处理请求。保存这些线程对象的结构就叫做线程池。
在C#中可以通过System.Threading.ThreadPool类来实现,在默认情况下,ThreadPool最大可建立500个工作线程和1000个I/O线程(根据机器CPU个数和.net
framework版本的不同,这些数据可能会有变化)。下面是一个用C#从线程池获得线程的例子:
下图为上面代码的运行结果。
要注意的是,使用ThreadPool获得的线程都是后台线程。
下面的程序是我设计的一个下载文件服务器的例子。这个例子从ThreadPool获得线程,并处理相应的客户端请求。
FileServer类的使用方法:
FileServer fs = new FileServer(“d:\\download”);
fs.start(); // 端口为1234
如果d:"download目录中有一个叫aa.exe的文件,在浏览器中输入如下的地址可下载:
http://localhost:1234/aa.exe 下图为下载对话框:
要注意的是,本程序并没有处理含有中文和其他特殊字符(如空格)的url,因为,文件名要为英文名(不能有空格等特殊字符)。
相关文章推荐
- C#线程系列讲座(3):线程池和文件下载服务器
- C#线程系列讲座(3):线程池和文件下载服务器
- C#线程系列讲座(3):线程池和文件下载服务器
- C#线程系列讲座(3):线程池和文件下载服务器
- C#线程系列讲座(3):线程池和文件下载服务器
- C#线程系列讲座(3):线程池和文件下载服务器
- C#线程系列讲座(3):线程池和文件下载服务器
- C#线程系列讲座(3):线程池和文件下载服务器
- C#线程系列讲座(3):线程池和文件下载服务器
- [转]C#线程系列讲座(3):线程池和文件下载服务器
- C#线程系列讲座(3):线程池和文件下载服务器
- C#线程系列(3):线程池和文件下载服务器
- (转)C#线程系列讲座(3):线程池和文件下载服务器
- C#线程系列讲座(3):线程池和文件下载服务器
- C#线程系列(3):线程池和文件下载服务器
- C#线程系列讲座(3):线程池和文件下载服务器
- 线程3 线程池和文件下载服务器
- Android开发进阶系列(五) 连接服务器下载文件或资源
- 线程池和文件下载服务器
- C#线程系列讲座(3):线程池和文件下载服务器