关于thread pool的使用问题,急!! 谢谢大家

求大家赐教:
0。 我所follow的idea原文这样 “because the creation of tasks at runtime is expensive, we create the tasks ahead of time and block them on condition variables”
我理解,他们想用thread-pool来创建一批RR线程,先用condition variable将它们block,在main中使用,是这样的吗?
1。看了helpview,感觉这好像是resource manager的一个子部分,是不是这样呢?
2。所有的例子只是提供到

main{
····
thread-pool-start (tpp);}
就没有了下文,我不明白这个在具体的程序中怎么使用已创建的线程呢?

难道仍然用pthread-create(··)就行了?( 也就是说,thread-pool的ceate & start 是在resource manager里完成的,而在执行程序中,照常在需要创建thread的地方直接用pthread-create(··))
请麻烦大侠们给详细讲一下,(如果能推荐已有的例子 小弟更是求之不得。)
3。 resource manager和我要真正执行的程序是什么关系呢? 写好的resource manager 方在什么地方,如何执行呢 (不好意思,刚刚接触RM,这个问题很愚)
4。真的很麻烦xtang,qnx master,wsforever等大侠了,如果可以,能不能写几句整体的架构的代码 或推荐一个有代表性的thread pool的例子供参考?

新手上路,多多指教,感激不尽!!!

这个题目太大了,我只能试试。

最常见的服务程序,通常是:

for (;;) {

      /* 等待请求 */

      /* 对请求进行处理,并返回结果 */
  }

当这样的服务程序要变成多线程,从而能同时处理多个请求时,也就是多开几个线程,每个都做上述程序。但问题是,开多少线程好呢?开得太多浪费资源,开得太少又可能不能应付突发的大量请求。Thread Pool 线程池就是为了解决这个矛盾的。

线程池是一个自成一体的系统,它的思路就是提前有一批线程被“创建”,停在池中,等待服务。当服务的线程太多时(同时有大量的服务请求),新的线程会被创建来保证有空闲线程在“池”中能够服务新的请求。同时,如果线程池中的空闲线程太多的话,一部份线程会被注销。

Resource Manager是另一个慨念,不过,多线程资源管理器多借用Thread Pool,省缺了自已管理线程的麻烦。从这个角度讲,资源管理器确是与线程池联系紧密。不过,资源管理器并不一定需要线程池,同时,非资源管理器也可以使用线程池。

线程池的使用,主要是thread_pool_*()函数群。最主要的,是create()/start()/destroy()。线程池的最主要的设定,是传入thread_pool_create()的thread_pool_attr。这个参数里面定义了比如线程池中的最少,最多空闲线程数等,作为线程池的使用者,至少必须准备那里面的5个函数。

为了每个线程有个单独的上下文联系,在线程池中的线程在被创立时,都会调用attr.context_alloc()来准备上下文。当然在线程被注销时,attr.context_free()会被调用来free上下文。

attr.block()就是相当于“等待请求”的部份,在线程池中的线程被创建后,就会调用这个函数,从而等待请求。

attr.handler_func()就是相当于“服务请求并返回结果”的部份。

attr.unblock() 是用来打断block()的。

准备这五个函数,设定好attr,调用thread_pool_crate(),然后当一切都准备好了,直接调用thread_pool_start()就好了。