声明:本文内容纯属博主本身查找和概括的我的所需的知识点,仅做参考,若有错误,博主强烈但愿您指出。若是您是某个知识点的原创博主,若有须要,可联系本人加上连接。本文内容会根据博主所需进行更新,但愿你们多多关照。
df -h
是指同一个时间段内多个任务同时都在执行,而且都没有执行结束。并发任务强调在一个时间段内同时执行,而一个时间段由多个单位时间累积而成,因此说并发的多个任务在单位时间内不必定同时在执行 。linux
是说在单位时间内多个任务同时在执行。c++
在多线程编程实践中,线程的个数每每多于CPU的个数,因此通常都称多线程并发编程而不是多线程并行编程。shell
ps aux
,ps ajx
能显示父进程,查看内存占用:free -h
,查看当前cpu:top
运行态->挂起态:等待使用资源,如等待外设传输、人工干预等
运行态->就绪态:出现有更高优先权进程数据库
本质为一个伪文件,内核使用环形队列机制,借助内核缓冲区(4k)实现,数据一旦读走,管道中不在存在编程
mmap,一种内存映射文件的方法,将一个文件或者其它对象映射进内存,无血缘关系的进程间可以使用共享映射区进行通讯,在要求高性能的应用中比较经常使用。mmap映射内存必须是页面大小的整数倍,面向流的设备不能进行mmap,mmap的实现和硬件有关windows
简单但不能携带大量信息,知足条件才发送,至关于中断,有很强的延时性,全部信号都由内核(PCB)发送和处理
信号4要素:编号、名称、事件、默认处理动做
信号处理方式:执行默认动做(终止进程、忽略信号、终止进程并生成CORE文件、暂停进程、继续运行进程)、忽略、捕捉安全
kill -l
top -H
;ps -Lf
进程号,查看该进程的线程单个线程中的程序,是顺序执行的。若是前面的操做发生了阻塞,那么就会影响到后面的操做。这时候能够采用多线程多线程
有时候处理一条请求,会涉及到数据库访问、磁盘IO等操做,这些操做的速度比CPU慢不少,而在等待这些响应的时候,CPU却不能去处理新的请求,没有充分利用资源,这时多线程就发挥做用了并发
在知足条件的前提下,多线程确实能提高性能:
第1,任务具备并发性,子任务之间不能有前后顺序的依赖,必须是容许并行的,另外,还不能有资源竞争
第2,只有在CPU是性能瓶颈的状况下,多线程才能实现提高性能的目的。
第3,就是须要有多核CPU才行,若是上述条件都知足,有一个经验公式能够计算性能提高的比例,叫阿姆达尔定律:
速度提高比例 = 1/[(1-P)+(P/N)]
其中P是可并行任务的比例,N是CPU核心数量app
编译:gcc加要加-g,-g保留函数名和变量名
启动:gdb 可执行文件
传参:set args 参数1 参数2 ...
操做 | 命令 |
---|---|
查看第n行的上下程序 | l n |
设置查看n行上下程序 | set listsize n |
查看其余文件程序 | l 文件名 : n 或 函数名 |
在n行打断点 | b n |
查看断点 | i b |
删除断点 | d n,n为断点编号 |
设置无效或有效断点 | dis / enb n,n为断点编号 |
条件断点 | b n if 变量==值 |
运行 | r 或 start,r直接到断点,start进入程序第一行 |
单步执行 | n |
执行到下一个断点 | c |
查看变量信息 | p 变量名 |
查看变量类型 | ptype 变量名 |
一直显示变量信息 | display 变量名 |
取消显示变量 | 先i display 查看变量编号n,而后undisplay n |
进入函数 | s |
离开函数 | finish |
跳出循环 | until,须要删除断点 |
离开gdb | q |
gdb也能够直接调试core文件查看错误:
1.当一个程序出现段错误时,会出现如下提示:
Segmentation fault (core dumped)
core 指该程序运行时,进程空间的内存分布
dumped 表示内核已经把core抛出
一般,出现段错误提示时程序运行目录下应该自动生成一个core文件用来存储内核抛出的core,可是,因为linux环境通常默认设置core文件限制为0,因此通常状况下没法生成core文件。
2.查看core文件大小限制:ulimit -c
3.将其修改成无限制:ulimit -c unlimited
4.运行命令:gdb 执行文件名 core
5.gdb输入 where
命令行查看线程信息:
ps aux|grep 执行文件名
ps -aL|grep 执行文件名
pstree -p 主线程id
线程栈结构的查看:
ps stack 线程ID
利用gdb查看线程信息:
gdb attach 主线程ID
进入gdb调试:
info inferiors
:查看当前进程info threads
:查看当前线程bt
:查看当前线程栈结构thread n/ID
:切换线程(n表明第几个线程)break 行号/函数名
:设置当前线程断点break file.c:100 thread all
:在file.c文件第100行处为全部通过这里的线程设置断点。set scheduler-locking off/on/step
:thread apply ID1 ID2 command
:让一个或者多个线程执行GDB命令commandthread apply all command
:让全部被调试线程执行GDB命令command变量 = $(wildcard 文件路径)
变量 = $(patsubst 原名称, 替换后的名称, 源文件)
notdir
:去除文件名的目录函数basename
:取文件名函数$@
:规则中的目标 $<
:规则中的第一个依赖 $^
:规则中全部依赖/
:换行