响应式网站是做多大尺寸,做网站怎么写预算,seo优化案例,wordpress 中文语言设置目录 一、程序
1、什么是程序#xff1f;
二、进程
1、什么是进程#xff1f; 2、进程具有的特征
2.2进程#xff0c;线程#xff0c;协程
2.2.1 进程和线程的区别
2.2.2如何查看一个程序是多线程还是单线程
3、进程使用内存的问题
①内存泄漏#xff1a;Memory L…目录 一、程序
1、什么是程序
二、进程
1、什么是进程 2、进程具有的特征
2.2进程线程协程
2.2.1 进程和线程的区别
2.2.2如何查看一个程序是多线程还是单线程
3、进程使用内存的问题
①内存泄漏Memory Leak
②内存溢出Memory Overflow
③内存不足OOM Out Of memory
4、进程状态
4.1进程的基本状态
4.2状态之间转换六种情况
4.3 进程更多的状态
4.4 僵尸进程
5、进程的优先级
6、进行分类 一、程序
1、什么是程序 执行特定任务的一段代码 二、进程
1、什么是进程 运行中的程序的一个副本是被载入内存的一个指令集合是资源分配的单位,是硬件资源分配的最小单位。 进程IDProcess IDPID号码被用来标记各个进程 UID、GID语境决定对文件系统的存取和访问权限通常从执行进程的用户来继承。 通常从执行进程的用户来继承 存在生命周期 都由其父进程创建 进程创建 init第一个进程从 CentOS7 以后为systemd 进程都由其父进程创建fork()父子关系CoWCopy On Write 写实更新有数据写入子进程需要新的内存空间 2、进程具有的特征 动态性进程是程序的一次执行过程是临时的有生命期的是动态产生动态消亡的 并发性任何进程都可以同其他进程一起并发执行 独立性进程是系统进行资源分配和调度的一个独立单位 结构性进程由程序、数据和进程控制块三部分组成。 2.2进程线程协程
进程
①硬件资源分配的最小单位
②只分配任务不执行任务
线程
①线程是程序执行的最小单位
②减少硬件资源的消耗 协程
是一种基于线程之上但又比线程更加轻量级的存在这种由程序员自己写程序来管理的轻量级线程叫做『用户空间线程』具有对内核来说不可见的特性。
2.2.1 进程和线程的区别 线程是程序执行的最小单位而进程是操作系统分配资源的最小单位 一个进程由一个或多个线程组成线程是一个进程中代码的不同执行路线 进程之间相互独立但同一进程下的各个线程之间共享程序的内存空间(包括代码段、数据集、堆等)及一些进程级的资源(如打开文件和信号)某进程内的线程在其它进程不可见 调度和切换线程上下文切换比进程上下文切换要快得多。 2.2.2如何查看一个程序是多线程还是单线程 pstree grep -i threads /proc/进程的PID/status prtstat 进程pid号|GREP -j threads 3、进程使用内存的问题
①内存泄漏Memory Leak 指程序中用malloc或new申请了一块内存但是没有用free或delete将内存释放导致这块内存一直处于占用状态 ②内存溢出Memory Overflow 指程序申请了10M的空间但是在这个空间写入10M以上字节的数据就是溢出。 ③内存不足OOM Out Of memory OOM 即 Out Of Memory“内存用完了”,在情况在java程序中比较常见。系统会选一个进程将之杀死在日志messages中看到类似下面的提示 Jul 10 10:20:30 kernel: Out of memory: Kill process 9527 (java) score 88 or sacrifice child 当JVM因为没有足够的内存来为对象分配空间并且垃圾回收器也已经没有空间可回收时就会抛出这个error因为这个问题已经严重到不足以被应用处理。 原因 给应用分配内存太少比如虚拟机本身可使用的内存一般通过启动时的JVM参数指定太少。 应用用的太多并且用完没释放浪费了。此时就会造成内存泄露或者内存溢出。 使用的解决办法 1限制java进程的max heap并且降低java程序的worker数量从而降低内存使用 2给系统增加swap空间 pmap 进程id #查看进程具体模块所占内存的大小 4、进程状态 4.1进程的基本状态 创建状态进程在创建时需要申请一个空白PCB(process control block进程控制块)向其中填写控制和管理进程的信息完成资源分配。如果创建工作无法完成比如资源无法满足就无法被调度运行把此时进程所处状态称为创建状态 就绪状态进程已准备好已分配到所需资源只要分配到CPU就能够立即运行 执行状态进程处于就绪状态被调度后进程进入执行状态 阻塞状态正在执行的进程由于某些事件I/O请求申请缓存区失败而暂时无法运行进程受到阻塞。在满足请求时进入就绪状态等待系统调用 终止状态进程结束或出现错误或被系统终止进入终止状态。无法再执行 4.2状态之间转换六种情况
运行——就绪
①主要是进程占用CPU的时间过长而系统分配给该进程占用CPU的时间是有限的
②在采用抢先式优先级调度算法的系统中,当有更高优先级的进程要运行时该进程就被迫让出CPU该进程便由执行状态转变为就绪状态
就绪——运行
运行的进程的时间片用完调度就转到就绪队列中选择合适的进程分配CPU
运行——阻塞
正在执行的进程因发生某等待事件而无法执行则进程由执行状态变为阻塞状态如发生了I/O请求
阻塞——就绪:
进程所等待的事件已经发生就进入就绪队列
以下两种状态是不可能发生的
阻塞——运行
即使给阻塞进程分配CPU也无法执行操作系统在进行调度时不会从阻塞队列进行挑选而是从就绪队列中选取
就绪——阻塞
就绪态根本就没有执行谈不上进入阻塞态
4.3 进程更多的状态 运行态running 就绪态ready 睡眠态分为两种可中断interruptable不可中断uninterruptable 停止态stopped暂停于内存但不会被调度除非手动启动 僵死态zombie僵尸态结束进程父进程结束前子进程不关闭杀死父进程可以关闭僵死态 的子进程
4.4 僵尸进程 一个进程结束了但是如果该进程的父进程已经先结束了那么该进程就不会变成僵尸进程因为每个进程结束的时候系统都会扫描当前系统中所运行的所有进程看有没有哪个进程是刚刚结束的这个进程的子进程如果是的话就由Init来接管它成为它的父进程子进程退出后init会回收其占用的相关资源。但是当子进程比父进程先结束而父进程又没有回收子进程释放子进程占用的资源此时子进程将成为一个僵厂进程。 父进程退出 子进程没有退出 那么这些子进程就没有父进程来管理了 就变成僵尸进程。 子进程已经结束了父进程没有意识到。 [rootcentos7 ~]#bash
[rootcentos7 ~]#echo $BASHPID
1809
[rootcentos7 ~]#echo $PPID
1436
#将父进程设为停止态
[rootcentos7 ~]#kill -19 1436
#杀死子进程使其进入僵尸态
[rootcentos7 ~]#kill -9 1809
[rootcentos7 ~]#ps aux #可以看到上面图示的结果STAT为Z表示为僵尸态
#方法1:恢复父进程
[rootcentos7 ~]#kill -18 1436
#方法2:杀死父进程
[rootcentos7 ~]#kill -9 1436
#再次观察可以僵尸态的进程不存在了
[rootcentos7 ~]#ps aux 5、进程的优先级 在 Linux 系统中表示进程优先级的有两个参数Priority 和 Nice 其中PRI 代表 PriorityNI 代表 Nice。这两个值都表示优先级数值越小代表该进程越优先被 CPU 处理。不过PRI值是由内核动态调整的用户不能直接修改。所以我们只能通过修改 NI 值来影响 PRI 值间接地调整进程优先级。 PRI 和 NI 的关系如下 PRI (最终值) PRI (原始值) NI 其实大家只需要记得我们修改 NI 的值就可以改变进程的优先级即可。NI 值越小进程的 PRI 就会降低该进程就越优先被 CPU 处理反之NI 值越大进程的 PRI 值就会増加该进程就越靠后被 CPU 处理。 修改 NI 值时有几个注意事项 NI 范围是 -20~19。 普通用户调整 NI 值的范围是 0~19而且只能调整自己的进程。 普通用户只能调高 NI 值而不能降低。如原本 NI 值为 0则只能调整为大于 0。 只有 root 用户才能设定进程 NI 值为负值而且可以调整任何用户的进程。 进程优先级调整 静态优先级100-139 进程默认启动时的nice值为0优先级为120 只有根用户才能降低nice值提高优先性 6、进行分类 操作系统分类 协作式多任务早期 windows 系统使用即一个任务得到了 CPU 时间除非它自己放弃使用CPU 否则将完全霸占 CPU 所以任务之间需要协作——使用一段时间的 CPU 主动放弃使用 抢占式多任务Linux内核CPU的总控制权在操作系统手中操作系统会轮流询问每一个任务是否需要使用 CPU 需要使用的话就让它用不过在一定时间后操作系统会剥夺当前任务的 CPU 使用权把它排在询问队列的最后再去询问下一个任务 进程类型 守护进程: daemon,在系统引导过程中启动的进程和终端无关进程 前台进程跟终端相关通过终端启动的进程 注意两者可相互转化 按进程资源使用的分类 CPU-BoundCPU 密集型非交互 IO-BoundIO 密集型交互