支持通用框架的threadpool代码

在编写服务器时,很多人会考虑到应用线程池来解决多线程的问题,当然我也越到了这个问题,所以顺便查找了一下linux的通用框架线程池,

并花了两天把它实现了出来,大体过程描述可以在

http://blog.csdn.net/hwalk/archive/2007/06/18/1657110.aspx 这个网址中查看流程,代码部分可以在我的资源:

http://jaff20071234.download.csdn.net/ 中下载到。

 

下面是这两天中log的描述:

 

------2010-12-1------

线程池稍微模型,但是明显存在的一个大问题是---

我的线程类实现的机制有问题:在每个start函数中创建线程,在创建线程之前,调用了sem.wait()函数,这样的话,主线程

在创建第一个thread的start函数就wait在哪里,主线程无法继续走下去了 。。。悲哀,明天继续考虑其他的方式。

---shawn

------2010-12-2------

今天已经写的差不多了,还有一些内在的小bug需要优化,可以在http://www.oschina.net/code/snippet_102078_2072或者

http://jaff20071234.download.csdn.net/可以下载到该线程池资源。

------2010-12-3------

突然又发现了一个问题,线程池内创建的线程无法具有可重用性。今天起开始改进,还有数据结构可以重新调整,查询,添加和删除的

次数比较多,所以可以尝试采用关联容器,或hash 。

bug:每次创建了这么多线程当用完后,便都没有了,虽然也没有释放线程资源,但是也不能继续使用了,所在考虑在routine中添加while循环通过调用exitthread设置循环变量为false来解决这个问题,中间差点放弃了,以为pthread很有限制,还是个人思维的限制啊 ~~·

 

okay,今天算是落幕了,性能测试也结束了,这个小小的线程池代码对我来说还是有挑战性的,代码可以在oschina上下载到所有的。

在去吃饭的路上,突然想起代码部分存留的唯一的一个bug,这次应该很确认了,虽然基本上没问题,但是为了以防万一,在0.1毫秒情况下

可能会发生的意外,我又添加了一个互斥量来解决这个问题。应该是彻底结束了,先玩转自己写的threadpool,好好享受n多线程执行n多任务的爽歪歪的感觉吧 ~~~hoho ~~~



 

对threadpool的性能测试



自己编写的threadpool(http://www.oschina.net/code/snippet_102078_2072或者http://jaff20071234.download.csdn.net/),没有正规的文档,只能自己编写程序进行性能测试了。

 

1。

创建一个threadmanage对象只含有10个线程,同时运行10000个任务,每个任务的工作是循环50次打印字符串。

创建一个threadmanage对象只含有100个线程,同时运行10000个任务,每个任务的工作是循环50次打印字符串。

两次运行的时间差距不大,均需要30多秒,说明此时受到了处理器资源的限制。

测试代码如下:

 

2。

创建一个threadmanage对象只含有10个线程,同时运行10000个任务,每个任务的工作是循环50次打印字符串。

另外只在一个主线程中运行50*10000次打印输出,如果运行同样的任务,按照上面的思路去理解,需要的时间应该要少,

因为是直接调用运行,不需要经过多次函数调用,信号等待,和任务等待等等。

但是从另外一个角度,此时只有一个线程运行,运用的处理器资源少,所以需要时间要长,结果是45秒左右。

测试代码如下:

 

随便测试了一个100000个任务时,就恐怖了,从上完厕所回来,只执行了20000个,哎,分布式的服务器才会满足n多用户

时的需求吧 ~~~


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值