Socket网络编程学习笔记(6):使用线程池提高性能
2006-10-30 17:10
1216 查看
在前几篇介绍中,不论是服务端的侦听还是客户端的连接都是通过新建一个线程去执行特定功能的。在这种情况下,一量有一个新客户端需要连接,则又得创建新的线程,而当程序创建新线程时,往往需要大量的内部开销,这对程序的性能有一定的影响。在.NET库中提供了一种方法,可以避免一些开销。而在Socket通讯中还有另一种访求那就是异步Socket,我不知道用这种方式的性能如何,在这里且不管这种形式,主要来看一下用线程池解决问题。
Windows操作系允许用户维持一池“预先建立的”线程,这个线程池为应用程序中指定的方法提供工作线索。一个线程控制线程池的操作,并用应用程序可以分配附加的线程进行处理。在默认情况下,在线程池中有25个预处理线程,用这种方式可以满足一些小应用。
如果要为线程池中的线程注册一个代表,则用下面的格式:
ThreadPool.QueueUserWorkItem(new WaitCallback(Counter));
其中QueueUserWorkItem是ThreadPool类的一个静态方法;而Counter参数代表运行在线程中的方法,在这要注意的是该Counter方法必须包含一个object 参数,这个在下面的例子中有体现;另外,处Thread对象不一样,代表一旦放置在线程池查询中上,将被处理,不需要其他的方法启动该项工作;当主程序线程退出,所有的线程池线程都将终止,主线程不会等待线程池线程结束。
下面我们来看看怎么样运用到我上面讲的例子中去:
原有线程调用:
clientThread = new Thread(new ThreadStart(ReceiveData));
clientThread.Start();
用线程池只要一句就可以了:
ThreadPool.QueueUserWorkItem(new WaitCallback(ReceiveData));
其它具体的请下载源码。
源码下载:/Files/licongjie/SocketTest3.rar
Windows操作系允许用户维持一池“预先建立的”线程,这个线程池为应用程序中指定的方法提供工作线索。一个线程控制线程池的操作,并用应用程序可以分配附加的线程进行处理。在默认情况下,在线程池中有25个预处理线程,用这种方式可以满足一些小应用。
如果要为线程池中的线程注册一个代表,则用下面的格式:
ThreadPool.QueueUserWorkItem(new WaitCallback(Counter));
其中QueueUserWorkItem是ThreadPool类的一个静态方法;而Counter参数代表运行在线程中的方法,在这要注意的是该Counter方法必须包含一个object 参数,这个在下面的例子中有体现;另外,处Thread对象不一样,代表一旦放置在线程池查询中上,将被处理,不需要其他的方法启动该项工作;当主程序线程退出,所有的线程池线程都将终止,主线程不会等待线程池线程结束。
下面我们来看看怎么样运用到我上面讲的例子中去:
原有线程调用:
clientThread = new Thread(new ThreadStart(ReceiveData));
clientThread.Start();
用线程池只要一句就可以了:
ThreadPool.QueueUserWorkItem(new WaitCallback(ReceiveData));
其它具体的请下载源码。
源码下载:/Files/licongjie/SocketTest3.rar
相关文章推荐
- iOS 即时通讯 Socket使用学习笔记
- 【收藏学习笔记】使用supervisor提高node.js调试效率
- 网络编程学习笔记(使用select函数的TCP和UDP回射服务器程序)
- 数据结构与算法学习笔记之 提高读取性能的链表(上)
- python网络编程学习笔记(五):socket的一些补充
- 网络编程学习笔记一:Socket编程
- python网络编程学习笔记(二):socket建立网络客户端
- 网络编程学习笔记一:Socket编程
- python socket 的使用 - 千月的python linux 系统管理指南学习笔记(20)
- 微软企业库5.0 学习之路——第四步、使用缓存提高网站的性能(EntLib Caching)
- C# 学习笔记 -- 第二天 使用注释提高代码可读性
- 使用异步 I/O 大大提高应用程序的性能 学习何时以及如何使用 POSIX AIO API
- python网络编程学习笔记(3):socket网络服务器
- Socket网络编程学习笔记(5):发送和接收实体类数据
- linux基础之使用异步 I/O 大大提高应用程序的性能 学习何时以及如何使用 POSIX AIO API
- python网络编程学习笔记(三):socket网络服务器
- python网络编程学习笔记(五):socket的一些补充
- Socket网络编程学习笔记(2):面向连接的Socket
- 游戏编程精粹学习 - 使用Bloom过滤来提高计算性能(BloomFilter)
- 【学习笔记】Python网络编程(二)socket处理多个连接