并发实战值之----线程池--线程池的作用

来源:互联网 发布:java程序员面试秘笈 编辑:程序博客网 时间:2024/05/16 05:16

二,线程池:

1线程池的作用:

通过线程的复用,降低资源消耗(线程创建和销毁造成的消耗);

操作系统是通过线程控制块(Thread Control Block来管理一个线程的,即创建一个线程首先要创建一个TCB一个TCB包括下面四种内容:

     1)线程标识符(thread ID):线程的ID号。
     2)程序计数器(program counter):记录线程当前执行指令下一条的地址。
     3)寄存器集(register set):保存CPU中寄存器中的数据,这在线程恢复运行时必须的。
     4)栈(stack):用于存储局部变量,和进程的栈没什么区别。

    可以看出,线程并没有一个堆。那线程通过newmalloc申请的资源从何二来呢?我们要知道属于同一进程的线程是共享全局变量等资源的。一个线程要申请一块内存,将直接在它所属进程的堆上进行,这样,其他线程就可以访问到本线程创造的数据了。

创建一个线程,需要事先分配这么多资源,自然需要花费一些时间。我们知道,操作系统通过一个链表来管理空闲内存列表的。当程序申请一块内存时,操作系统从空闲内存列表里去寻找一块满足大小的空闲内存,并将地址返回给程序。程序使用完后,又将内存块释放给操作系统。如果我们事先创建一个线程池,里面存放几个创建好的线程,就减少了线程创建的代价,因而可以提高程序的性能。

 

通过线程的复用,提高响应速度。当任务到达时,任务可以不需要的等到线程创建就能立即执行。

提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。

原创粉丝点击