C
gangjianh
这个作者很懒,什么都没留下…
展开
-
Linux协议栈学习与积累
linux内核对于套接字的管理会用到锁,linux使用如下两个接口进行加解锁lock_sock,release_sock。但是这两个函数不仅仅是完成了加解锁的操作。lock_sock: 首先尝试拿到获取锁的资格,这个资格由一个变量记录sk->sk_lock.owned,这个变量用spin_lock保护。这个这个变量值不为0,则说明有其它上下文占用了这个锁,则进一步的会将当前进程挂到一个等待队列中,然后主动调度CPU,等待唤醒。被唤醒之后,将sk->sk_lock.owned赋值,然后去执.原创 2020-05-12 22:46:06 · 185 阅读 · 0 评论 -
TIPS
TIPSglibc使用ptmalloc实现malloc。ptmalloc会管理从内核申请到的内存,可以使用的内存包括堆内存以及mmap申请的内存。进程申请、释放内存由ptmalloc管理,而不是直接交由内核处理。ptmalloc支持多线程,各个线程之间申请内存时,使用锁进行保护。因此,多线程下效率会受到影响。...原创 2019-11-06 23:19:48 · 133 阅读 · 0 评论 -
C语言小知识
#define ____cacheline_aligned attribute((aligned(SMP_CACHE_BYTES))) 。这个宏定义表示结构体或者字段是按照cpu的L1高速缓存对齐的。结构体与CACHE LINE对齐的原因:CACHE与内存交换的最小单位为CACHE LINE,一个CACHELINE大小以64字节为例。当我们的结构体大小没有与64字节对齐时,一个结构体可...原创 2020-05-05 23:22:27 · 368 阅读 · 0 评论