C#论坛-玄机论坛-C#论坛-玄机宝盒-玄机类库-C#

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1167|回复: 11

[资源分享] [迷离↘糾結╮]线程池应用例子|网络爬虫|MySql增删改查

[复制链接]
  • TA的每日心情

    2017-8-2 14:18
  • 签到天数: 3 天

    [LV.2]【绿林好汉】

    qyhack 发表于 2014-10-29 21:51:14 | 显示全部楼层 |阅读模式

    玄机论坛-专业的C#交流论坛 交流QQ群: 16885911
    如有疑问,请加入官方群询问

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    本帖最后由 qyhack 于 2014-10-29 22:03 编辑

         线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程都是后台线程。每个线程都使用默认的堆栈大小,以默认的优先级运行,并处于多线程单元中。如果某个线程在托管代码中空闲(如正在等待某个事件),则线程池将插入另一个辅助线程来使所有处理器保持繁忙。如果所有线程池线程都始终保持繁忙,但队列中包含挂起的工作,则线程池将在一段时间后创建另一个辅助线程但线程的数目永远不会超过最大值。超过最大值的线程可以排队,但他们要等到其他线程完成后才启动。

    组成部分                                                                        
    1、线程池管理器(ThreadPoolManager):用于创建并管理线程池
    2、工作线程(WorkThread): 线程池中线程
    3、任务接口(Task):每个任务必须实现的接口,以供工作线程调度任务的执行。
    4、任务队列:用于存放没有处理的任务。提供一种缓冲机制。

    技术背景                                                                        
    在面向对象编程中,创建和销毁对象是很费时间的,因为创建一个对象要获取内存资源或者其它更多资源。在C#中更是如此,虚拟机将试图跟踪每一个对象,以便能够在对象销毁后进行垃圾回收。所以提高服务程序效率的一个手段就是尽可能减少创建和销毁对象的次数,特别是一些很耗资源的对象创建和销毁。如何利用已有对象来服务就是一个需要解决的关键问题,其实这就是一些"池化资源"技术产生的原因。比如大家所熟悉的数据库连接池正是遵循这一思想而产生的,本文将介绍的线程池技术同样符合这一思想。
    目前,一些著名的大公司都特别看好这项技术,并早已经在他们的产品中应用该技术。比如IBM的WebSphere,IONA的Orbix 2000在SUN的 Jini中,Microsoft的MTS(Microsoft Transaction Server 2.0),COM+等。

    功能                                                                                
    应用程序可以有多个线程,这些线程在休眠状态中需要耗费大量时间来等待事件发生。其他线程可能进入睡眠状态,并且仅定期被唤醒以轮循更改或更新状态信息,然后再次进入休眠状态。为了简化对这些线程的管理,.NET框架为每个进程提供了一个线程池,一个线程池有若干个等待操作状态,当一个等待操作完成时,线程池中的辅助线程会执行回调函数。线程池中的线程由系统管理,程序员不需要费力于线程管理,可以集中精力处理应用程序任务。
    相关信息                                                                        
    何时不使用线程池线程:
    ●如果需要使一个任务具有特定优先级
    ●如果具有可能会长时间运行(并因此阻塞其他任务)的任务
    ●如果需要将线程放置到单线程单元中(线程池中的线程均处于多线程单元中)
    ●如果需要永久标识来标识和控制线程,比如想使用专用线程来终止该线程,将其挂起或按名称发现它
    System.ThreadingPool类实现了线程池,这是一个静态类,它提供了管理线程的一系列方法
    Threading.QueueUserItem方法在线程池中创建一个线程池线程来执行指定方法(用委托WaitCallBack表示),并将该线程排入线程池的队列等待执行。
    1
    public static BooleanQueueUserWorkItem(WaitCallbackwc,Object state);

    传递参数                                                                          
    调用QueueUserWorkItem时传入的Object类型参数传递到任务过程,可以通过这种方式来向任务过程传递参数。如果任务过程需要多个参数,可以定义包含这些数据的类,并将其强制转换为Object数据类型。
    应用范围                                                                          
    1、需要大量的线程来完成任务,且完成任务的时间比较短。 WEB服务器完成网页请求这样的任务,使用线程池技术是非常合适的。因为单个任务小,而任务数量巨大,你可以想象一个热门网站的点击次数。 但对于长时间的任务,比如一个Telnet连接请求,线程池的优点就不明显了。因为Telnet会话时间比线程的创建时间大多了。
    2、对性能要求苛刻的应用,比如要求服务器迅速响应客户请求。
    3、接受突发性的大量请求,但不至于使服务器因此产生大量线程的应用。突发性大量客户请求,在没有线程池情况下,将产生大量线程,虽然理论上大部分操作系统线程数目最大值不是问题,短时间内产生大量线程可能使内存到达极限,并出现"OutOfMemory"的错误。


    实际例子:正常运行三天左右,成功抓取百万数据。代码比较粗糙,希望大家指正。
    注意:在线程执行方法里面加了锁,抓取速度大大降低了。请不要效仿。


    QQ图片20141029213310.jpg


    附件:   CodeDataCollect.rar (143.33 KB, 下载次数: 192)

    评分

    参与人数 1紫晶 +10 收起 理由
    佐佑 + 10 神马都是浮云

    查看全部评分

    玄机论坛-专业的C#交流论坛 交流QQ群: 16885911
    帖子内网盘失效后请使用下面地址

    http://bbs.msdn5.com/thread-1218-1-1.html
    如果失效请联系站长重新分享
    回复

    使用道具 举报

    该用户从未签到

    ofnhkb1 发表于 2014-10-29 23:31:21 | 显示全部楼层
    支持楼主
    玄机论坛-专业的C#交流论坛 交流QQ群: 16885911
    帖子内网盘失效后请使用下面地址

    http://bbs.msdn5.com/thread-1218-1-1.html
    如果失效请联系站长重新分享
    回复

    使用道具 举报

    该用户从未签到

    呵呵 发表于 2014-10-30 07:40:41 | 显示全部楼层
    又是一个高手啊
    玄机论坛-专业的C#交流论坛 交流QQ群: 16885911
    帖子内网盘失效后请使用下面地址

    http://bbs.msdn5.com/thread-1218-1-1.html
    如果失效请联系站长重新分享
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2018-3-16 15:14
  • 签到天数: 13 天

    [LV.3]【仗剑天涯】

    佐佑 发表于 2014-10-31 01:40:36 | 显示全部楼层
    楼主头像碉堡了
    玄机论坛-专业的C#交流论坛 交流QQ群: 16885911
    帖子内网盘失效后请使用下面地址

    http://bbs.msdn5.com/thread-1218-1-1.html
    如果失效请联系站长重新分享
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2017-8-2 14:18
  • 签到天数: 3 天

    [LV.2]【绿林好汉】

     楼主| qyhack 发表于 2014-10-31 09:02:13 | 显示全部楼层
    佐佑 发表于 2014-10-31 01:40
    楼主头像碉堡了

    必须碉堡了
    玄机论坛-专业的C#交流论坛 交流QQ群: 16885911
    帖子内网盘失效后请使用下面地址

    http://bbs.msdn5.com/thread-1218-1-1.html
    如果失效请联系站长重新分享
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2017-3-7 10:46
  • 签到天数: 4 天

    [LV.2]【绿林好汉】

    inghot 发表于 2014-10-31 17:38:47 | 显示全部楼层
    好厉害的说啊。。
    玄机论坛-专业的C#交流论坛 交流QQ群: 16885911
    帖子内网盘失效后请使用下面地址

    http://bbs.msdn5.com/thread-1218-1-1.html
    如果失效请联系站长重新分享
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2017-12-21 23:53
  • 签到天数: 6 天

    [LV.2]【绿林好汉】

    lcylcyll 发表于 2014-11-3 02:29:14 | 显示全部楼层
    出一个视频可以不!!
    我还没有看明白
    玄机论坛-专业的C#交流论坛 交流QQ群: 16885911
    帖子内网盘失效后请使用下面地址

    http://bbs.msdn5.com/thread-1218-1-1.html
    如果失效请联系站长重新分享
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2017-8-2 14:18
  • 签到天数: 3 天

    [LV.2]【绿林好汉】

     楼主| qyhack 发表于 2014-11-3 09:06:06 | 显示全部楼层
    lcylcyll 发表于 2014-11-3 02:29
    出一个视频可以不!!
    我还没有看明白

    不好意思啊  我空闲时间不是很多啊  出视频有点恼火  有什么问题可以回复讨论
    玄机论坛-专业的C#交流论坛 交流QQ群: 16885911
    帖子内网盘失效后请使用下面地址

    http://bbs.msdn5.com/thread-1218-1-1.html
    如果失效请联系站长重新分享
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    mmgx2015 发表于 2014-11-3 13:07:07 | 显示全部楼层
    这例子很强大,慢慢理解学习中................. 多谢楼主分享
    玄机论坛-专业的C#交流论坛 交流QQ群: 16885911
    帖子内网盘失效后请使用下面地址

    http://bbs.msdn5.com/thread-1218-1-1.html
    如果失效请联系站长重新分享
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2016-11-8 15:14
  • 签到天数: 1 天

    [LV.1]【初入江湖】

    root 发表于 2014-11-8 16:11:51 | 显示全部楼层
    能正常运行 三天。。支撑下~~学习下~~
    玄机论坛-专业的C#交流论坛 交流QQ群: 16885911
    帖子内网盘失效后请使用下面地址

    http://bbs.msdn5.com/thread-1218-1-1.html
    如果失效请联系站长重新分享
    回复 支持 反对

    使用道具 举报

    *滑动验证:
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条

    QQ|Archiver|手机版|小黑屋|玄机论坛   

    GMT+8, 2018-6-21 16:24 , Processed in 0.611931 second(s), 27 queries .

    Powered by Msdn5.com

    © 2014-2015 Msdn5 Inc.

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