C连载28-宏、编译宏、select、epoll函数

一、宏

1.定义

  • #define是C语言中的一个宏定义,用来建一个标识符定义为一个字符串,该标识符被称为宏名,被定义的字符串称为替换文本
  • 例如:#define PI 3.1415926 #define A(x) x

2.宏替换

编译预处理是实现以下功能
  • 文件包含:把源文件中的#include扩展为文件正文
  • 条件编译:预处理器根据#if和#ifdef等编译命令及其后的条件,将源程序中某部分包含进来或者排除在外,通常把排除在外的语句转换成空行
  • 宏展开:预编译器将源程序文件中出现的对宏的引用展开成相应的宏定义,也就是本文所说的#define的功能,由预处理器来完成

3.三种特殊用法

二、size_t

1.size_t类型

  • 在32位系统中size_t是4字节的,在64系统中size_t是8字节的,增强了该类型的可移植性
  • 定义
typedef unsigned log kernal_size_t;
typedef int unsigned __kernal_size_t;
  • 注意点:无符号的类型和有符号的类型进行比较的时候,有符号的类型会先转换为无符号,例如-1装换成无符号的就是4294967295

三、epoll函数

  • 为了处理高并发的场景而设计的
  • 引子问题:如果有成千上万个客户端是和服务器相连的,但是实际上保持活跃的也就那么几千几百个,所以成千上百空余的链接都是没有没用的,造成计算资源的浪费。
  • epool通过在linux内核中申请一个简易的文件系统把原来的select/poll调用分为三个部分:
    • 调用epoll_create建立一个epoll对象(在epoll文件系统中为这个句柄对象分配资源)
    • 调用epoll_ctl向epoll对象中添加这个成千上万个连接的Socket
    • 调用epoll_wati收集发生的事件的连接
  • 通过这种机制,只需要在进程启动的时候建立一个epoll对象,然后在需要的时候向这个epoll对象中添加或者删除连接。

四、编译宏

int eap_register_methoed(void)
{
	int ret = 0;
#ifdef EAP_MD5
	if (ret == 0)
		ret = eap_peer_md5_register();
#endif 
...
#ifdef EAP_SERVER_MD5
	if (ret == )
		ret = eap_server_md5_register();
#endif
...
	return ret;
}

五、select与epoll函数

指标selectepoll
性能随着连接户数量的增减,急剧下降,处理成千上万并发链接的时候,性能很差随着链接数量的增阿基,性能基本没有下降,处理成千上万并发的时候洗能呢很好
连接数连接数有限制,处理嘴大链接数不超过1024,如果超过这个数字,就要修改FD_SETSIZE宏,并进行重新编译连接数没有限制
实现方式线性轮询回调callBak
开发复杂性
  • 调用过程
    28.1

参考:一文搞懂select、poll和epoll区别

六、源码

  • gitee路径:https://gitee.com/dongqianrui/AndroidStudioProject/tree/master/Test1
  • CSDN:https://blog.csdn.net/weixin_44630050
  • 博客园:https://www.cnblogs.com/ruigege0000/
  • 欢迎wxgzh:傅里叶变换,个人账号,仅用于技术交流
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值