Web Server项目实战5-线程同步机制类封装及线程池实现

进程和线程的区别

进程

一个在内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程可以有多个线程

线程

进程中的一个小小单元,负责当前进程中程序的执行,一个进程至少有一个线程,一个进程可以运行多个线程,多个线程可以共享数据

区别总结

线程具有许多进程所具有的特征,故又称轻量级进程。进程是OS分配资源的基本单位,而线程是CPU任务调度和执行的基本单位。

线程池

线程池是由服务器预先创建的一组子线程,线程池中的线程数量应该和 CPU 数量差不多。线程池中的所有子线程都运行着相同的代码,当有新的任务到来时,主线程将通过某种方式选择线程池中的某个子线程来为之服务。相比于动态地创建子线程,选择一个已经存在的子线程的代价显然要小得多。至于主线程选择哪个子线程来为新任务服务,则有多种方式:

主线程使用某种算法来主动选择子线程。最常用的算法是随机算法Round Robin (轮流选取)算法,但更优秀、更智能的算法将使任务在各个工作线程中更均匀地分配,从而减轻服务器的整体压力。

主线程和所有子线程通过一个共享的工作队列来同步,子线程都睡眠在该工作队列上。当有新的任务到来时,主线程将任务添加到工作队列中。这将唤醒正在等待任务的子线程,不过只有一个子线程将获得新任务的接管权,它可以从工作队列中取出任务并执行,而其它子线程将继续睡眠在工作队列上。

特点

1.空间换时间,浪费服务器的硬件资源,换取运行效率;

2.池是一组资源的集合,这组资源再服务器启动之初就被完全创建好并初始化,这称为静态资源;

3.当服务器进入正式运行阶段,开始处理客户请求的时候,如果它需要相关的资源,可以直接从池中获取,无需动态分配;

4.当服务器处理完一个客户连接后,可以把相关的资源放回池中,无需执行系统调用释放资源。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值