项目总结-多线程并发服务器

本文介绍了使用muduo网络库构建的B/S服务器项目,采用线程池、非阻塞IO和IO多路复用的reactor并发模型。讨论了TCP/IP协议族、线程同步机制、线程池的工作原理,以及并发模型的选择。通过对比select、poll和epoll,展示了在高并发场景下,reactor模式的优势。同时,指出了多线程并不能直接提高并发度,而单线程模型能实现更高的并发处理能力。并提出了通过多线程让I/O和计算重叠的方法,以优化服务性能。
摘要由CSDN通过智能技术生成

项目介绍

看过陈硕大神的muduo网络库,想借助这个网络库做个项目练练手,加深对网络编程知识的理解。
这是一个采用B/S结构模式的服务器程序,使用线程池+非阻塞IO+IO多路复用的reactor并发模型,通过访问数据库实现在web端注册登录功能,可以请求服务器上的图片,服务器是用的阿里云免费申请的,在网上找了一个压力测试工具,测试可以实现上万的并发连接。

使用到的协议

TCP/IP协议族:

  • 数据链路层:ARP协议和RARP协议,实现IP地址和机器物理地址之间的转换。
  • 网络层:
    IP协议,为上层协议提供无状态、无连接、不可靠的服务
    ICMP协议,检测网络连接(使用IP协议提供的服务)
  • 传输层:
    TCP协议,为应用层提供可靠的、面向连接的、基于流的服务;
    UDP协议,为应用层提供不可靠的、无连接的、基于数据报的服务;
    SCTP协议,使用网络传输电话信号。
  • 应用层:
    telnet协议,远程登录服务
    ssh协议,提供主机与服务器间的加密传输
    ftp协议,用于大文件的网络传输
    OSPF协议,用于路由器之间的通信
    DNS协议:用于查询目标主机的IP地址。

线程池相关

手写线程池


线程的同步机制

1.互斥锁 pthread_mutex_lockpthread_mutex_unlock
2.信号量 sem_initsem_waitsem_postsem_destory
3.条件变量 pthread_cond_initpthread_cond_waitpthread_cond_signalpthread_cond_destory

线程池中的工作线程是一直等待吗?

线程池中的工作线程在没有任务时一直处于挂起等待状态,在任务队列有任务后会唤醒一个任务进程进行任务处理。

工作线程处理完一个任务后的状态是什么?

工作线程处理完任务后从任务队列读取任务,若没有任务则处于挂起等待状态。

并发模型

reactor、procator
**reactor模式:**用于同步IO,需要应用程序自己读取或写入数据
**proactor模式:**用于异步IO,需操作系统处理数据读写,
select、poll、epoll区别:
select:
缺点:通过数组存储文件描述符,支持fd数量有限;
每次调用需要将fd从用户态拷贝到内核态,开销大;
内核遍历fd开销大
优点:可移植性好,超时值可以达到微秒。
poll:
缺点: 每次调用需要将fd从用户态拷贝到内核态,开销大;
内核遍历fd开销大
优点:不需要计算最大文件描述符的大小,用链表存储fd;

epoll:
缺点:当所有socket基本都是活跃的,epoll不比poll有效率<

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

toctor

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值