聊天室项目服务器端的并发问题——使用线程池技术(1)

一、原因
之前在聊天室项目中,服务器端模型的选择了单客户端单线程,统一accept()的模型,大致就是一个在一个线程中循环accept接受客户端连接,接受到一个连接就创建一个专用线程。在客户端连接的时间段中,线程一直保持。

单客户端单线程,统一accept的多线程并发模型
这种模型虽然比多进程并发模型更加优秀,如占用资源少,可以数据共享,响应快。但是如果考虑高并发的情况,例如在很短的时间有大量的用户请求需要处理,会极快的消耗掉服务器的线程资源,拖慢服务器的运行速度,甚至死机。(如每年春运时期12306购票系统。。。)很多时候,用户只是挂着,不做任何操作,浪费大量的资源。

二、解决
线程池的概念:应用程序可以有多个线程,这些线程在休眠状态中需要耗费大量时间来等待事件发生。其他线程可能进入睡眠状态,并且仅定期被唤醒以轮循更改或更新状态信息,然后再次进入休眠状态。
线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程都是后台线程.每个线程都使用默认的堆栈大小,以默认的优先级运行,并处于多线程单元中.如果某个线程在托管代码中空闲(如正在等待某个事件),则线程池将插入另一个辅助线程来使所有处理器保持繁忙.如果所有线程池线程都始终保持繁忙,但队列中包含挂起的工作,则线程池将在一段时间后创建另一个辅助线程但线程的数目永远不会超过最大值.超过最大值的线程可以排队,但他们要等到其他线程完成后才启动

三、方案
这里写图片描述
使用使用pthread_create()函数,使用多个线程组成线程池

四、注意问题
各个线程中,按照流程,接受客户端连接accept(),其中accept()可能在线程池各个线程中会引起冲突,所以要用互斥锁。
寝室快断网了,先上传,等以后有时间写完。。。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值