
操作系统
文章平均质量分 79
GoodLinGL
这个作者很懒,什么都没留下…
展开
-
linux查看服务器负载和资源占用情况,以及性能监控
1.查看磁盘Linux磁盘管理常用三个命令为df、du和fdisk。df:列出文件系统的整体磁盘使用量du:检查磁盘空间使用量fdisk:用于磁盘分区df命令参数功能:检查文件系统的磁盘空间占用情况。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。df [-ahikHTm] [目录或文件名]选项与参数:-a :列出所有的文件系统,包括系统特有的 /proc 等文件系统;-k :以 KBytes 的容量显示各文件系统;-m :以 MBytes 的容量显示各文件系统;转载 2021-05-14 14:40:15 · 23395 阅读 · 0 评论 -
select、poll、epoll 区别总结
select、poll、epoll 区别总结1、支持一个进程所能打开的最大连接数select:单个进程所能打开的最大连接数有FD_SETSIZE宏定义,其大小是32个整数的大小(在32位的机器上,大小就是3232,同理64位机器上FD_SETSIZE为3264),当然我们可以对进行修改,然后重新编译内核,但是性能可能会受到影响,这需要进一步的测试。poll:poll本质上和select没有区别,但是它没有最大连接数的限制,原因是它是基于链表来存储的。epoll:虽然连接数有上限,但是很大,1G内存的转载 2021-05-12 17:32:42 · 883 阅读 · 0 评论 -
进程内存加载过程
在进程创建的过程中,程序内容被映射到进程的虚拟内存空间,为了让一个很大的程序在有限的物理内存空间运行,我们可以把这个程序的开始部分先加载到物理内存空间运行,因为操作系统处理的是进程的虚拟地址,如果在进行虚拟到物理地址的转换工程中,发现物理地址不存在时,这个时候就会发生缺页异常(nopage),接着操作系统就会把磁盘上还没有加载到内存中的数据加载到物理内存中,对应的进程页表进行更新。也许你会问,如果此时物理内存满了,操作系统将如何处理?可以使用页面置换算法,如LRU(最近最少使用)。...转载 2021-04-28 09:03:37 · 483 阅读 · 0 评论 -
C++11线程中的几种锁
线程之间的锁有:互斥锁、条件锁、自旋锁、读写锁、递归锁。一般而言,锁的功能与性能成反比。不过我们一般不使用递归锁(C++标准库提供了std::recursive_mutex),所以这里就不推荐了。互斥锁(Mutex)...转载 2021-04-26 13:29:59 · 8340 阅读 · 0 评论 -
C++ 加锁的原则
规则1 多线程、进程并行访问共享资源时,一定要加锁保护说明:共享资源包括全局变量,静态变量,共享内存,文件等。 建议封装像智能指针一样的对象对锁进行管理,比如我们就封装了一个auto_lock,在构造时申请 锁,析构中释放锁,保证不会忘记“解锁”。如果锁的作用范围有限,则可以这样: do { auto_lock lock(&lock); //… }while(0);规则2 锁的职责单一说明:每个锁只锁一个唯一共享资源;这样,才能保证锁应用的单一,也能更好的确保加锁的范围尽 量小。转载 2021-04-23 08:42:06 · 2711 阅读 · 0 评论 -
c++内存泄漏和内存碎片
内存泄漏一般我们常说的内存泄漏是指堆内存的泄漏。堆内存是指程序从堆中分配的,大小任意的(内存块的大小可以在程序运行期决定),使用完后必须显示释放的内存。应用程序一般使用malloc,realloc,new等函数从堆中分配到一块内存,使用完后,程序必须负责相应的调用free或delete释放该 内存块,否则,这块内存就不能被再次使用,我们就说这块内存泄漏了。对于C和C++这种没有Garbage Collection 的语言来讲,我们主要关注两种类型的内存泄漏:堆内存泄漏(Heap leak):对内存指的转载 2021-04-22 19:24:02 · 860 阅读 · 0 评论 -
IO模型、阻塞IO和非阻塞IO、同步IO和异步IO
IO1. IO2. 5种IO模型2.1 阻塞IO模型2.2 非阻塞IO模型2.3 多路复用IO模型信号驱动IO模型异步IO模型两种高性能IO设计模式1. IOIO (Input/Output,输入/输出)即数据的读取(接收)或写入(发送)操作,通常用户进程中的一个完整IO分为两阶段:用户进程空间<–>内核空间、内核空间<–>设备空间(磁盘、网络等)。IO有内存IO、网络IO和磁盘IO三种,通常我们说的IO指的是后两者。LINUX中进程无法直接操作I/O设备,其必须通过系统调用转载 2021-03-29 12:21:38 · 234 阅读 · 0 评论 -
I/O密集型程序和运算密集型程序
CPU密集型一些进程绝大多数时间在计算上,即一个计算为主的程序称为计算密集型(CPU密集型)computer-bound。多线程跑的时候,可以充分利用起所有的cpu核心,比如说4个核心的cpu,开4个线程的时候,可以同时跑4个线程的运算任务,此时是最大效率。但是如果线程远远超出cpu核心数量 反而会使得任务效率下降,因为频繁的切换线程也是要消耗时间的。因此对于cpu密集型的任务来说,线程数等于cpu数是最好的了。I/O密集型有一些进程则在input 和output上花费了大多时间,是一个磁盘或网原创 2021-03-25 10:15:52 · 1067 阅读 · 0 评论 -
线程安全问题——线程冲突、死锁
线程冲突、死锁等问题都属于线程安全问题,具体的:两个线程对一个变量进行操作,但是没有上锁,即没有进行同步操作,就像买车票的时候多个窗口一起卖,但是车票数没有减去。车票被重复卖出。就是不安全。还有,被多个线程操作的变量改为静态量加static,才安全。在java中,对于多线程冲突问题,我们采用一种常规的解决方法,就是同步机制,即对操作加synchronized关键字。synchronized 方法控制对类成员变量的访问: 每个类实例对应一把锁,每个 synchronized 方法都必须获得调用该方法的类实原创 2021-03-24 23:29:59 · 1564 阅读 · 0 评论 -
死锁的产生及处理
死锁什么是死锁产生死锁的原因竞争不可抢占资源引起死锁竞争可消耗资源引起死锁进程推进顺序不当引起死锁产生死锁的四个必要条件处理死锁的方法预防死锁避免死锁常用避免死锁的方法常用避免死锁的技术死锁检测检测死锁解除死锁什么是死锁多线程以及多进程改善了系统资源的利用率并提高了系统 的处理能力。然而,并发执行也带来了新的问题——死锁。死锁是指两个或两个以上的进程(线程)在运行过程中因争夺资源而造成的一种僵局(Deadly-Embrace) ) ,若无外力作用,这些进程(线程)都将无法向前推进。关于死锁的一些结论转载 2021-03-24 10:51:39 · 695 阅读 · 0 评论 -
进程,线程和协程的区别和联系
协程(Coroutines)是一种比线程更加轻量级的存在,正如一个进程可以拥有多个线程一样,一个线程可以拥有多个协程。协程不是被操作系统内核所管理的,而是完全由程序所控制,也就是在用户态执行。这样带来的好处是性能大幅度的提升,因为不会像线程切换那样消耗资源。协程不是进程也不是线程,而是一个特殊的函数,这个函数可以在某个地方挂起,并且可以重新在挂起处外继续运行。所以说,协程与进程、线程相比并不是一个维度的概念。一个进程可以包含多个线程,一个线程也可以包含多个协程。简单来说,一个线程内可以由多个这样的特转载 2021-03-23 00:13:26 · 284 阅读 · 0 评论 -
多线程和并发问题
首先说下多线程出现的原因:为了解决负载均衡问题,充分利用CPU资源.为了提高CPU的使用率,采用多线程的方式去同时完成几件事情而不互相干扰.为了处理大量的IO操作时或处理的情况需要花费大量的时间等等,比如:读写文件,视频图像的采集,处理,显示,保存等多线程的好处:使用线程可以把占据时间长的程序中的任务放到后台去处理用户界面更加吸引人,这样比如用户点击了一个按钮去触发某件事件的处理,可以弹出一个进度条来显示处理的进度程序的运行效率可能会提高在一些等待的任务实现上如用户输入,转载 2021-03-23 00:08:11 · 1309 阅读 · 0 评论 -
虚拟内存
局部性原理局部性原理是虚拟内存技术的基础,正是因为程序运行具有局部性原理,才可以只装入部分程序到内存就开始运行。早在 1968 年的时候,就有人指出我们的程序在执行的时候往往呈现局部性规律,也就是说在某个较短的时间段内,程序执行局限于某一小部分,程序访问的存储空间也局限于某个区域。局部性原理表现在以下两个方面:时间局部性 :如果程序中的某条指令一旦执行,不久以后该指令可能再次执行;如果某数据被访问过,不久以后该数据可能再次被访问。产生时间局部性的典型原因,是由于在程序中存在着大量的循环操作。转载 2021-03-21 10:14:49 · 231 阅读 · 0 评论 -
操作系统内存管理基础
内存管理介绍操作系统的内存管理主要负责内存的分配与回收(malloc 函数:申请内存,free 函数:释放内存),另外地址转换也就是将逻辑地址转换成相应的物理地址等功能也是操作系统内存管理做的事情。常见的几种内存管理机制简单分为连续分配管理方式和非连续分配管理方式这两种。连续分配管理方式是指为一个用户程序分配一个连续的内存空间,常见的如 块式管理 。同样地,非连续分配管理方式允许一个程序使用的内存分布在离散或者说不相邻的内存中,常见的如页式管理、段式管理和段页式管理。块式管理 : 远古时代的计算机操转载 2021-03-21 00:33:09 · 234 阅读 · 0 评论 -
进程和线程
进程和线程的区别从上图可以看出:一个进程中可以有多个线程,多个线程共享进程的堆和方法区 (JDK1.8 之后的元空间)资源,但是每个线程有自己的程序计数器、虚拟机栈 和 本地方法栈。总结: 线程是进程划分成的更小的运行单位,一个进程在其执行的过程中可以产生多个线程。线程和进程最大的不同在于基本上各进程是独立的,而各线程则不一定,因为同一进程中的线程极有可能会相互影响。线程执行开销小,但不利于资源的管理和保护;而进程正相反。进程有哪几种状态创建状态(new) :进程正在被创建,尚未到就绪状态。就转载 2021-03-20 22:36:41 · 478 阅读 · 0 评论 -
线程同步的方式
定义同步: 同步就是协同步调,按预定的先后次序进行运行。如:你说完,我再说。这里的同步千万不要理解成那个同时进行,应是指协同、协助、互相配合。线程同步: 指多线程通过特定的设置(如互斥量,事件对象,临界区)来控制线程之间的执行顺序(即所谓的同步)也可以说是在线程之间通过同步建立起执行顺序的关系,如果没有同步,那线程之间是各自运行各自的!线程互斥: 指对于共享的进程系统资源,在各单个线程访问时的排它性。当有若干个线程都要使用某一共享资源时,任何时刻最多只允许一个线程去使用,其它要使用该资源的线程必须等待原创 2021-03-11 15:59:00 · 237 阅读 · 0 评论