![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux
axiaojikuaipao
这个作者很懒,什么都没留下…
展开
-
libevent源码阅读笔记
1.概述 libvent是基于事件驱动的开源框架.记录一下看源码学到的东西. 2. 核心结构体.struct event { TAILQ_ENTRY (event) ev_next; TAILQ_ENTRY (event) ev_active_next; TAILQ_ENTRY (event) ev_signal_next; unsigned int min_he原创 2017-10-18 00:11:10 · 451 阅读 · 0 评论 -
libevent数据结构尾队列
1.概述 最近找来libevent的源码学习了一下,看到用宏实现的数据结构甚是惊讶,把其中尾队列的代码copy出来test了一下.个人感觉用宏实现该队列的思想是C++的模板的思想.我自己实现一个队列的思路肯定是写一个队列 中节点的结构体然后针对该结构体实现队列的基本操作.这样的队列只能使用于写好的节点….而libevent实现的版本是不依赖于实际的节点的.换句话说,我们有两个类,一个student原创 2017-10-17 12:38:05 · 329 阅读 · 0 评论 -
linux进程间通信之共享内存
1.概述 共享内存是最快的进程间通信方式,系统在内存中维护一个特殊大小的内存块,进程可以将这快内存使用自己的页表映射到自己的内存空间中,则该内存就可以被两个进程访问实现了通信的功能.而且建立映射关系后传输数据时不用再进入内核,相比于消息队列而言更快. 2.基本数据结构struct shmid_ds {struct ipc_permshm_perm;/* operation perms */原创 2017-10-16 16:50:11 · 173 阅读 · 0 评论 -
linux进程间通信之信号量
1.概述 以前上课老师说信号量是二十世纪操作系统领域最伟大的发明之一,另外一项技术是虚拟内存.个人感觉linux系统中的锁的机制的实现应该都与信号量相关,先写下来不管对错, 互斥锁感觉就是0 -1 的二元信号量,其实这两者都依赖于底层的原子的操作来帮它们实现p v 操作. 2.linux中信号量有关的数据结构struct sem {short sempid;/* pid of last o原创 2017-10-16 12:06:04 · 181 阅读 · 0 评论 -
linux进程间通信---消息队列
1.概述 消息队列是SYSTEM V实现的进程间通信方式,linux操作系统支持这种通信方式,内核需要为每一个消息队列维护一系列数据结构. 2.消息队列所设计的数据结构struct msg {struct msg *msg_next; /* next message on queue */long msg_type;char *msg_spot;/* message text addre原创 2017-10-15 20:53:10 · 229 阅读 · 0 评论 -
linux 进程间通信之管道和有名管道
管道经常用于有亲缘关系间的进程间通信,管道pipe借助于文件系统的接口,但其实管道的实现应该不在文件系统中,只是实现了文件系统系统的接口,利用进程在fork时,子进程会继承父进程的进程描述符,实际在fork时,内核中对应的打开的文件的引用计数会增加1,父子进程都可以访问相同的文件. 管道也是一种单向通信的方式,即半双工,父进程关闭读端,子进程关闭写端,则父进程向管道的一端写,子进程会在管道的另外一原创 2017-10-15 18:31:42 · 292 阅读 · 0 评论 -
linux 信号笔记
1.linux信号是一种古老的进程间通信的方式,唯一一种异步通信的方式,信号的默认处理方式一般是结束当前进程如SIGINT,SIGQUIT等,应用进程可以自己控制进程处理的方式和流程. 2.信号的注册 使用signal函数或者sigaction函数注册, 3.信号是不可靠的进程间通信方式,在信号的执行例程中不能被同一种信号打断,但是会被进程接收到的其他信号所打断,#include <stdio.原创 2017-10-15 11:18:41 · 371 阅读 · 0 评论 -
linux线程同步-条件变量
多线程环境下,如果多个线程对同一共享资源并发访问,那么由于访问资源的时候,由于访问资源的操作的非原子性,可能在向一个buffer写入数据时,另外一个线程也在写入buffer 这时候可能由于两条线程的交替执行的时机的随机性而使得结果每一次运行都不同,这时候就需要操作系统提供的互斥机制来保证某一时刻只有一个线程访问临界区代码,这就是互斥量的语义. 互斥是同步的特殊情况,相当于一个线程告诉另外一个线程,我原创 2017-10-22 22:14:49 · 688 阅读 · 0 评论 -
nginx源码阅读笔记.array和list数据结构
1.概述 nginx中,array和list 的实现 和queue的实现不同,queue的实现是不依赖于具体的结构的,可以申明任何结构体只要该结构体中间含有queue的实例就可以将它们组织起来,那么queue的对象的内存分配需要(用户自己申请),在分配的包含queue的对象时已经分配好, 而list和array 的实现则时初始化一个list或者array, 自定义的结构的内存分配任务交给list原创 2017-10-18 22:13:16 · 203 阅读 · 0 评论 -
nginx数据结构ngx_queue_t
1.概述 nginx为了跨平台底层封装了自己的数据结构,今天学了ngx_queue_t这个数据结构,这个结构实现了双向队列,该双向队列可以应用到任意结构体中把相应的结构体按照队列的方式组织起来.2.代码/* * Copyright (C) Igor Sysoev * Copyright (C) Nginx, Inc. */#include <ngx_config.h>#include原创 2017-10-18 19:20:05 · 312 阅读 · 0 评论 -
connect系统调用
1.概述 linux网络编程中,一般是客户端调用connect函数,该函数将引起操作系统的tcp协议向远端的服务器执行三次握手的过程,分为两种情况进行说明,一种是connect的第一个参数文件描述符是非阻塞的.一种是该文件描述符是阻塞的. 2.阻塞情况 当该文件描述符是阻塞的时候,那么connect调用也必然是阻塞的,只有当连接上或者连接失败时返回,意味着connect返回时仅有两种情况,已经原创 2017-11-16 21:12:43 · 838 阅读 · 0 评论