linux
diediexiaomi
这个作者很懒,什么都没留下…
展开
-
线程安全和可重入函数
线程安全线程安全:一个函数称为线程安全,当且仅当被多个并发线程反复调用时,它一直产生正确的结果。如果一个函数不是线程安全的,我们就说它是线程不安全的。 以下我们定义4种,线程不安全的函数: (第1类):不保护共享变量的函数,比如对一个全局变量多个线程操作,产生错误结果; 解决方法:利用像P,V操作这样的同步操作保护共享变量,优点:不用改代码,缺点:程序执行时间变慢。原创 2017-05-12 21:41:32 · 316 阅读 · 0 评论 -
linux 音频播放的系统层问题
1. 音频框架简单介绍linux 的音频管理是比较繁杂,我们的音频框架上层应用是的 js 服务, 中间层 ffmpeg + pulseaudio,底层的 alsa。 整个链路比较长,如何快速的定位播放问题是个问题,我对常见的问题做了总结2. 常见问题的定位2.1 设备无声a. 确认各播放相关的进程是否正常,在内存珍贵的开发板上发送内存不足,进程被 OOM 一点也不奇怪,查看 pulseau...原创 2019-07-26 16:06:27 · 1839 阅读 · 0 评论 -
进程的信号量和线程的信号量
学习多进程的同步与互斥,和多线的同步与互斥时,发现他们都有sem信号量,很困惑就查了一下区别才发现: 信号量分为有名与无名 信号量在进程是以有名信号量进行通信的,在线程是以无名信号进行通信的,因为线程linux还没有实现进程间的通信,所以在sem_init的第二个参数要为0,而且在多线程间的同步是可以通过有名信号量也可通过无名信号,但是一般情况线程的同步是无名信号量,无名信号原创 2017-08-05 15:52:56 · 4454 阅读 · 0 评论 -
僵死状态&&僵尸进程
首先表明一下:僵死状态是每个子进程的正常状态,但僵死进程是一种有毒有危害的进程。 (1)僵死状态&僵尸进程: fork()之后为了让父进程知道子进程的退出, 所以UNⅨ提供了一种机制可以保证只要父进程想知道子进程结束时的状态信息, 就可以得到。这种机制就是: 在每个进程退出的时候,内核释放该进程所有的资源,包括打开的文件,占用的内存等。但是仍然为其保留一定的信息(包括进程号the原创 2017-08-04 22:01:58 · 1286 阅读 · 0 评论 -
进程的地址空间
内核管理用户空间进程的内存,是虚拟的内存,不是物理的地址,可以通过页表找到物理内存,它是一个范围,有起始位置,叫内存区域。 (1)什么是虚拟内存:是一种内存管理的技术,,它通常是被分隔成多个 物理内存碎片,还有部分暂时存储在外部 磁盘存储器上,但是它使应用程序认为自己就在一块连续的内存上跑。 (2) (2)进程空间之间是相互独立的。 (3)一个进程的地址空间与另一个进程的地址空间即使有相转载 2017-08-04 20:16:45 · 651 阅读 · 0 评论 -
HTTP代理服务器的工作原理
在http通信链上,客户端和目标服务器之间通常存在某些中转的代理服务器,他们提供对目标资源的中转访问,一个HTTP请求可能被多个代理服务器转发,后面的服务器成为前面的服务器的上游服务器 代理服务器根据其使用方法和作用分为正向代理服务器,反向代理服务器,以及透明代理服务器 (1)正向代理服务器要求客户端自己设置服务器的地址,客户的每次请求都将发到该代理服务器,并由该代理服务器来请求目标资源,比原创 2017-08-07 16:02:13 · 2052 阅读 · 0 评论 -
高性能服务器之select
系统提供select函数来实现多路复⽤用输⼊入/输出模型。select系统调⽤用是⽤用来让我们的程序监视 多个⽂文件句柄的状态变化的。程序会停在select这⾥里等待,直到被监视的⽂文件句柄有⼀一个或 多个发⽣生了状态改变 int select(int nfds,fd_set * readfds,fd_set*writefds,fd_set*exceptfds,struct timeval*tim原创 2017-06-14 17:35:14 · 316 阅读 · 0 评论 -
高性能服务器之epoll
什么是epoll epoll是什么?是为处理⼤大批量句柄⽽而作了改进的poll。它⼏几乎具备了之前所说的⼀一切优点,被公认为Linux2.6下性能最好的多路I/O就绪通 知⽅方法。 epoll的相关系统调⽤用 epoll只有epoll_create,epoll_ctl,epoll_wait 3个系统调⽤用。 1. int epoll_create(int size); 创建⼀一个epoll的原创 2017-06-14 17:17:51 · 477 阅读 · 0 评论 -
进程通信之消息队列
1。消息队列 消息队列提供一种从一个进程到另一个进程发送有类型数据块的方法。消息队列与管道的不同是消息队列是基于消息的,而管道是基于字节流的,且消息队列的读取不一定先进先出,与命名管道有一样的不足就是每个消息的最大长度是有上限的(MSGMAX),每个消息队列的总的字节数也是有上限的(MSGMNB),系统上消息队列的总数也是有上限的(MSGMNI)原创 2017-05-12 20:19:17 · 307 阅读 · 0 评论 -
简单的网络服务器(简单的TCP,简单的UDP,多进程多线程TCP)
网路编程接口: (1)int socket(int domain, int type,int protocol) domain:说明我们网络程序所在的主机采用的通讯协族(AF_UNIX和AF_INET等). type:我们网络程序所采用的通讯协议(SOCK_STREAM,SOCK_DGRAM等) protocol:由于我们指定了type,所以这个地方我们一般只要用0来代替就可以了 so原创 2017-06-02 18:44:06 · 295 阅读 · 0 评论 -
嵌入式 linux性能问题
这篇文章主要主要记录下我对 linux 开发板的一些性能工具的使用和各问题定位的学习和应用, 分4大块,基础知识,内存泄露的定位,cpu 性能的定位, 还有 coredump 文件分析。 主要是内存泄露的定位。不过,我觉得在定位这些问题首先应该对相关的代码有一定了解,因为对代码了解可以帮助我们更快的定位问题。一. 基础知识1.1 Linux 内核的 OOM 机制Linux内核内存管理使用 ...原创 2019-07-26 16:53:21 · 1797 阅读 · 1 评论