APP服务端优化——2.将多进程改为多线程

  将多进程改为多线程的目的就是:服务端采用数据库连接池的方法去连接数据库,实现数据库的共享,这样就可以提升服务端的性能,响应速度也能提高。 (在修改之前,先拷贝一份服务端程序)

一、修改的注意事项

1.将创建多进程的函数改为创建多线程的函数

2.创建一个容器,存放子线程的socket

  为什么要创建一个容器来存放子线程的socket呢?因为子线程的socket是局部变量,当主函数使用exit退出函数时,就不会释放局部变量。所以为了防止局部变量没有释放,每次创建一个子线程的socket连接,就将socket连接放入容器中。前面的文章有说明。

3.将原来多进程的程序的return修改为break

  当一个线程出错时,我们不能采用return停止这个线程,这样会导致其他的线程也被停止。

4.makefile文件连接线程库

在这里插入图片描述

5.修改全局变量

   多进程程序中,主要有的全局变量是业务请求参数,数据库连接对象,接收报文的缓冲区,发送报文的缓冲区。

   现在要在线程的的处理主函数中将它们改为局部变量
在这里插入图片描述

5.1 业务请求参数

  在多进程的程序中,我们将业务请求的声明和定义放在函数的外面。
在这里插入图片描述
  现在要改为多线程,就是要将业务请求参数的结构体在函数外面声明,在函数内部定义,这样就是局部变量了。

(1)声明

在这里插入图片描述

(2)在线程主函数中定义

在这里插入图片描述

(3)将业务结构体变量作为参数传给需要到业务参数的函数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.2 数据库连接对象

(1)将全局的数据库连接对象去掉

在这里插入图片描述

(2)把数据库连接对象放在线程主函数中定义

在这里插入图片描述

(3)修改连接数据的方式

  在连接数据库之前,判断一下连接状态,如果 数据库还没有连接,就连接数据库。
在这里插入图片描述

(4)将数据库连接对象传到需要操作数据库的函数中

  一般是传给业务处理函数,对数据进行增删查改的函数。
在这里插入图片描述

在这里插入图片描述

5.3 接收发送报文缓冲区

在这里插入图片描述

(1)线程主函数中定义

  这两个变量是在线程主函数中有用到。那么将他们改为在线程主函数定义
在这里插入图片描述

(2)心跳业务中

  在心跳业务中也要发送心跳报文,所以也需要发送接收报文的缓冲区(也就是buffer)。但是心跳报文不与真正的数据相关,所以可以在心跳业务中定义这个缓冲区,不用参数。
在这里插入图片描述

(3)真正的业务处理函数中

在这里插入图片描述

5.4 修改socket为局部变量

(1)将TcpServer.Read 和 TcpServer.Write 改为 tcp.Read 和 tcp.Write

  在原来的多进程程序中,我们用来接收报文发送报文的函数是封装好了的TcpServer 中的Read 和 Write,但是这样改不了socket,或者说TcpServer用的是全局变量socket,而现在我们要用局部变量socket。

TcpServer.Read 是调用 tcp.Read ,TcpServer.Write 调用 tcp.Write
在这里插入图片描述
  所以我们现在不用封装好的TcpServe,用它的下一层函数。直接用tcp.Read 和tcp.Write

(2)将socket 传给 tcp.Read 和 tcp.Write

注意这里的socket是怎么传的,是谁传的,是TCPServer传给的。
在这里插入图片描述

(3)修改需要socket的函数的参数

在这里插入图片描述

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值