nginx内存池__2018.05.18
1.就是在原来实现的基础上加上一个count计数器,表明,当时这段内存有几个对象引用。
2.线程安全问题,只有是在线程共享的东西上,才存在线程安全问题。
3.对所有线程共享的东西用volatile声明。共享变量内存的可见性。
4.多线程程不安全。
5.比较比较在修改,cas函数,保证加加减减的原子操作。
6.string的写时拷贝。触发写保护。计数、标志。借鉴了fork的写时拷贝。
Nginx创建内存池,用一些头部信息,来管理这部分内存。nginx相关的数据结构
用new创建size大小的内存池。源码:底层调用malloc,16字节对齐。
刚开始,p+size跳过头部信息这么多,当申请大于4096,就不是在内存池中开辟,只是将malloc申请的指针存在内存池中。
d就是需要申请的内存大小。几字节对齐。保证每次申请的都是按8字节对齐。
想要5个字节的内存分配8个、要7个分8个、要14个分16个。内存对齐,减少CPU io的次数。对齐后一次就可以取完。
struct data
{
short a;
int c;
}
对齐开辟内存,不对齐开辟内存,字节对齐可以提高CPU访问内存的效率。
小块的内存的释放,把大于max申请的空间直接释放,小块内存的释放,last指针,回收的时候,移动last指针就可以了。
客户端断开连接,它的内存已经没用了,小块内存并没有提供释放的函数,只有重置的函数,重置内存池,什么时候调这个重置内存池函数,合适?
怎样知道没有客户端使用,怎样检测没有用户使用?
锻炼知识表达能力。
一开始分配一个大的内存,自己管理起来。这就是内存池。什么时候重置内存池?小块内存。
内存池不应该回收,内存池大小是固定的,怎么回收,复用。
web服务器。跟普通的Linux服务器不同,web文本怎么组织,应用层。
web服务器的客户端就是浏览器。
用tcp跟服务器连接成功,请求成功,把http请求发到服务器,
模拟局域网聊天项目。(项目描述)一定要体现出自己用到了哪些技术、哪些知识,一定要指明。
看着很舒服,有内容,很丰满。
内存池的代码留下来。源码多看看。从main看起,主要看网络模块。写网络(我们)多进程、多线程。底层用epoll实现,io复用,多进程使用epoll,多进程,每个进程都有一个epoll。好的进程。
源码:
设计一个调度器,判断哪个进程处理处理客户端,不会发生忙等现象。
不会发生服务器惊群现象