05 2017 档案
摘要:转载: 突然想到epoll的内核实现,但是有点不明白设置了回调函数添加到等待队列后是如何唤醒的。所以找到了这篇文章。 Linux将进程状态描述为如下五种: :可运行状态。处于该状态的进程可以被调度执行而成为当前进程。 :可中断的睡眠状态。处于该状态的进程在所需资源有效时被唤醒,也可以通过信号或定时中
阅读全文
摘要:1、栈区(stack)—由编译器自动分配释放,存放函数的参数值,局部变量的值等。 2、堆区(heap)—一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。 3、全局区(静态区)(static)—全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域.data,未初始
阅读全文
摘要:进程分配内存有两种方式,分别由两个系统调用完成:brk和mmap: 1.brk是将数据段的(.data)的最高地址指针_edata往高地址推 2.mmap是虚拟地址空间找一个空闲的虚拟内存 如果malloc
阅读全文
摘要:在学习内核之前,因为虚拟内存的关系看过这篇文章,但是有的地方不是很懂。 现在对内核学习一段时间后,感觉这篇博客不错。 虚拟内存: 第一层理解 1.每个进程都有自己独立的4G内存空间,各个进程的内存空间具有类似的结构 2.一个新进程建立的时候,将会建立起自己的内存空间,此进程的数据,代码等从磁盘拷贝到
阅读全文
摘要:买了《深入Linux内核架构》这本书准备了解一下linux内核机制。但是最开始看了十几页感觉看着很累,本来都准备弃了 过了段时间看见一个面经有linux内核的内容,于是就照着那个先把内存管理学习了下。静下心来看发现这本书还是不错,我跳过了很多细节部分,先对内核管理有个大致了解。 水印+冷热页+伙伴系
阅读全文
摘要:ps:参考了很多博客,但是当时没记下链接。。。 互斥器和条件变量用法如下: 上面那个while能换成if吗?答案是不能,否则会导致spurious wakeup虚假唤醒。因为不仅要在pthread_cond_wait前要检查条件是否成立,在pthread_cond_wait之后也要检查。因为pthr
阅读全文
摘要:在create后会创建eventpoll对象保存在一个匿名fd的file struct的private指针中,然后进程睡在等待队列上面。 对于等待的fd,通过poll机制在准备好之后会调用相应的call_back函数。在函数中将当前fd加入对应eventpoll的队列中。 然后唤醒等待队列上面的进程
阅读全文
摘要:转载:http://studygolang.com/articles/2423 背景 在最近开发的项目中,后端需要编写许多提供HTTP接口的API,另外技术选型相对宽松,因此选择Golang + Beego框架进行开发。之所以选择Golang,主要是考虑到开发的模块,都需要接受瞬时大并发、请求需要经
阅读全文
摘要:defer: 延迟到ret之前,通常用于IO的关闭 or 错误处理。 在延迟出现的异常可以被后面的捕捉,但是只有最后一个。 defer可以多次,这样形成一个defer栈,后defer的语句在函数返回时将先被调用 panic: 函数执行的时候panic了,函数不往下走了,运行时并不是立刻向上传递pan
阅读全文
摘要:这篇文章主要介绍了Go语言中new()和 make()的区别详解,本文讲解了new 的主要特性、make 的主要特性,并对它们的区别做了总结,需要的朋友可以参考下 概述 Go 语言中的 new 和 make 一直是新手比较容易混淆的东西,咋一看很相似。不过解释两者之间的不同也非常容易。 new 的主
阅读全文

浙公网安备 33010602011771号