进程池与线程池的简单分析与实现

2017-07-08 23:09 阅读 783 次 评论 0 条

是一种用空间换时间的行为,比如我们常见的计算机的本地缓存、代理服务器、高速缓存等都是池或池的变种,它有效的避免了不同设备之间的频繁切换,从而提高了运行效率。

池的引入

池是一组资源的集合,有静态、动态资源分配之分。一组资源在服务器启动之初就完全被创建并初始化,称之为静态资源分配

当服务器运行时,如果需要资源,就可以直接从池中获取,而无需动态分配。因为分配系统资源通常比较耗时,当服务器处理完一个客户连接后,可以将相关资源放回池中,无需调执行系统调用来释放资源,从而避免了服务器内核态与用户态的的频繁切换

进程池与线程池

相对于池而言,进程与线程基本上没有区别:在OOP编程中,对象的构造与析构是一个较为复杂的过程,时间消耗较大,为了提高程序的运行效率,要尽可能减少构造和析构的次数。

因此我们要预先存放一些进程或线程到池,用时在池中取,用完归回给池,免去了创建、删除进程的开销。

进程池中的所有子进程都运行着相同的代码,并具体相同的属性,比如优先级、PGID等。当有新的任务到来时,调用过程如下:

⑴ 主进程使用某种算法(比如随机算法、轮流算法)来主动选择子进程。

⑵ 主进程和所有子进程通过一个共享的工作队列来同步,子进程睡眠在工作队列上,当有新任务到来时,会唤醒一个正在等待任务的拥有接管权的子进程,它从工作队列中取出任务并执行,而其他子进程将继续睡眠。

简单线程池的模拟实现

此代码参考至网上,底层数据结构采用链表来存储,创建10个子线程用链表链接成一个等待序列,当有新的任务发生时,从链表头取走子线程,退出时归还子线程至池中。

版权声明:本文著作权归原作者所有,欢迎分享本文,谢谢支持!
转载请注明:进程池与线程池的简单分析与实现 | 术与道的分享
分类:网络与安全 标签:, ,
1024do.com导航_术与道导航平台

发表评论


表情