OS
文章平均质量分 62
我是纠结伦
这个作者很懒,什么都没留下…
展开
-
C++--什么是内存泄漏,和内存溢出的区别,常见引起引起内存泄漏的原因,及解决办法
内存泄露和内存溢出的区别:内存溢出 : out of memory 指程序在申请内存时,没有足够的内存空间供其使用,出现out fo memory 比如申请一个int,但给它存了long才能存下的数那就是内存溢出内存泄露 : memory leak 指程序在申请内存后,无法释放已经申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后的结果很严重,无论多少内存,迟早会被占光即为:不再会被使用的对象的内存不能被回收,就是内存泄露C++没有垃圾回收机制,我们需要关注那些类型的内存泄漏?堆原创 2022-05-06 22:46:11 · 1136 阅读 · 0 评论 -
C++中new/delete、malloc/free异同点
一、相同两者都可以用来动态申请内存和释放内存;二、不同1.malloc/free是C/C++标准库的函数,new/delete是C++操作符。2.申请内存位置不同:new操作符是从自由存储区上为对象动态分配内存空间的,malloc函数是从堆上动态分配内存。自由存储区是C++基于new操作符的一个抽象概念, 凡是通过new操作符进行内存申请的, 该内存称为自由存储区。 而自由存储区的位置取决于operator new的实现细节。自由存储区不仅可以是堆, 也可以是静态存储区, 取决oper原创 2022-04-26 14:40:50 · 254 阅读 · 0 评论 -
C++中堆和栈的区别
//main.cpp int a = 0; 全局初始化区 char *p1; 全局未初始化区 main() { int b; 栈 char s[] = "abc"; 栈 char *p2; 栈 char *p3 = "123456"; 123456/0在常量区,p3在栈上。 static int c =0; 全局(静态)初始化区 .原创 2022-04-26 14:20:05 · 2445 阅读 · 0 评论 -
一个进程最多可以创建多少个线程?
这个问题跟两个东西有关系:进程的虚拟内存空间上限,因为创建一个线程,操作系统需要为其分配一个栈空间,如果线程数量越多,所需的栈空间就要越大,那么虚拟内存就会占用的越多。 系统参数限制,虽然 Linux 并没有内核参数来控制单个进程创建的最大线程个数,但是有系统级别的参数来控制整个系统的最大线程个数。比如下面这三个内核参数的大小,都会影响创建线程的上限:/proc/sys/kernel/threads-max,表示系统支持的最大线程数,默认值是14553; /proc/sys/kernel/p.原创 2022-04-23 11:02:29 · 3187 阅读 · 0 评论 -
什么是乐观锁、悲观锁、以及锁的种类
多线程访问共享资源的时候,避免不了资源竞争而导致数据错乱的问题,所以我们通常为了解决这一问题,都会在访问共享资源之前加锁。最常用的就是互斥锁,当然还有很多种不同的锁,比如自旋锁、读写锁、乐观锁等,不同种类的锁自然适用于不同的场景。如果选择了错误的锁,那么在一些高并发的场景下,可能会降低系统的性能,这样用户体验就会非常差了。所以,为了选择合适的锁,我们不仅需要清楚知道加锁的成本开销有多大,还需要分析业务场景中访问的共享资源的方式,再来还要考虑并发访问共享资源时的冲突概率。对症下药,才能减少锁对原创 2022-04-21 15:27:18 · 265 阅读 · 0 评论 -
如果客户端不发送数据,什么时候才会断开处于 ESTABLISHED 状态的连接?(TCP保活机制和心跳包)
TCP 的 保活机制(KeepAlive机制)。这个机制的原理是这样的:定义一个时间段,在这个时间段内,如果没有任何连接相关的活动,TCP 保活机制会开始作用,每隔一个时间间隔,发送一个「探测报文」,该探测报文包含的数据非常少,如果连续几个探测报文都没有得到响应,则认为当前的 TCP 连接已经死亡,系统内核将错误信息通知给上层应用程序。在 Linux 内核可以有对应的参数可以设置保活时间、保活探测的次数、保活探测的时间间隔,以下都为默认值:net.ipv4.tcp_keepalive_ti..原创 2022-04-21 14:49:48 · 1258 阅读 · 0 评论 -
死锁的概念及怎么避免死锁
死锁的概念在多线程编程中,我们为了防止多线程竞争共享资源而导致数据错乱,都会在操作共享资源之前加上互斥锁,只有成功获得到锁的线程,才能操作共享资源,获取不到锁的线程就只能等待,直到锁被释放。那么,当两个线程为了保护两个不同的共享资源而使用了两个互斥锁,那么这两个互斥锁应用不当的时候,可能会造成两个线程都在等待对方释放锁,在没有外力的作用下,这些线程会一直相互等待,就没办法继续运行,这种情况就是发生了死锁。举个例子,小林拿了小美房间的钥匙,而小林在自己的房间里,小美拿了小林房间的钥匙,而小美也在自原创 2022-04-19 16:00:19 · 190 阅读 · 0 评论 -
同步和互斥区别
互斥的概念由于多线程执行操作共享变量的这段代码可能会导致竞争状态,因此我们将此段代码称为临界区(critical section),它是访问共享资源的代码片段,一定不能给多线程同时执行。我们希望这段代码是互斥(mutualexclusion)的,也就说保证一个线程在临界区执行时,其他线程应该被阻止进入临界区,说白了,就是这段代码执行过程中,最多只能出现一个线程。另外,说一下互斥也并不是只针对多线程。在多进程竞争共享资源的时候,也同样是可以使用互斥的方式来避免资源竞争造成的资源混乱。同步的原创 2022-04-18 12:10:44 · 1803 阅读 · 1 评论 -
线程/进程同步
我们都知道在多线程里,每个线程并不一定是顺序执行的,它们基本是以各自独立的、不可预知的速度向前推进,但有时候我们又希望多个线程能密切合作,以实现一个共同的任务。例子,线程 1 是负责读入数据的,而线程 2 是负责处理数据的,这两个线程是相互合作、相互依赖的。线程 2 在没有收到线程 1 的唤醒通知时,就会一直阻塞等待,当线程 1 读完数据需要把数据传给线程 2 时,线程 1 会唤醒线程 2,并把数据交给线程 2 处理。所谓同步,就是并发进程/线程在一些关键点上可能需要互相等待与互通消息,这种相互制约原创 2022-04-18 12:07:14 · 270 阅读 · 0 评论 -
进程间的通信方式
由于每个进程的用户空间都是独立的,不能相互访问,这时就需要借助内核空间来实现进程间通信,原因很简单,每个进程都是共享一个内核空间。Linux 内核提供了不少进程间通信的方式,其中最简单的方式就是管道,管道分为「匿名管道」和「命名管道」。匿名管道顾名思义,它没有名字标识,匿名管道是特殊文件只存在于内存,没有存在于文件系统中,shell 命令中的「|」竖线就是匿名管道,通信的数据是无格式的流并且大小受限,通信的方式是单向的,数据只能在一个方向上流动,如果要双向通信,需要创建两个管道,再来匿名管道是只能用原创 2022-04-10 16:43:30 · 83 阅读 · 0 评论 -
计算密集型和IO密集型区别
计算密集型vs.IO密集型是否采用多任务的第二个考虑是任务的类型。我们可以把任务分为计算密集型和IO密集型。计算密集型任务的特点是要进行大量的计算,消耗CPU资源,比如计算圆周率、对视频进行高清解码等等,全靠CPU的运算能力。这种计算密集型任务虽然也可以用多任务完成,但是任务越多,花在任务切换的时间就越多,CPU执行任务的效率就越低,所以,要最高效地利用CPU,计算密集型任务同时进行的数量应当等于CPU的核心数。计算密集型任务由于主要消耗CPU资源,因此,代码运行效率至关重要。Python这样的原创 2022-04-10 14:31:06 · 651 阅读 · 0 评论 -
面试题:进程和线程的区别
一、进程是什么首先,抽象地来说,我们的计算机就是这个东西:这个大的矩形表示计算机的内存空间,其中的小矩形代表进程,左下角的圆形表示磁盘,右下角的图形表示一些输入输出设备,比如鼠标键盘显示器等等。另外,注意到内存空间被划分为了两块,上半部分表示用户空间,下半部分表示内核空间。用户空间装着用户进程需要使用的资源,比如你在程序代码里开一个数组,这个数组肯定存在用户空间;内核空间存放内核进程需要加载的系统资源,这一些资源一般是不允许用户访问的。但是注意有的用户进程会共享一些内核空间的资源,比如一些动转载 2022-03-29 16:28:40 · 441 阅读 · 0 评论 -
NAPI原理
NAPI是Linux新的网卡数据处理API,据说是由于找不到更好的名字,所以就叫NAPI(New API),在2.5之后引入。简单来说,NAPI是综合中断方式与轮询方式的技术。中断的好处是响应及时,如果数据量较小,则不会占用太多的CPU事件;缺点是数据量大时,会产生过多中断,而每个中断都要消耗不少的CPU时间,从而导致效率反而不如轮询高。轮询方式与中断方式相反,它更适合处理大量数据,因为每次轮询不需要消耗过多的CPU时间;缺点是即使只接收很少数据或不接收数据时,也要占用CPU时间。N原创 2022-04-03 16:32:02 · 2079 阅读 · 0 评论 -
硬中断和软中断区别
从本质上来讲,中断是一种电信号,当设备有某种事件发生时,它就会产生中断,通过总线把电信号发送给中断控制器。中断分为上下两部分,上半部分是硬中断,下半部分是软中断。如果中断的线是激活的,中断控制器就把电信号发送给处理器的某个特定引脚。处理器于是立即停止自己正在做的事,跳到中断处理程序的入口点,进行中断处理。(1) 硬中断由与系统相连的外设(比如网卡、硬盘)自动产生的。主要是用来通知操作系统系统外设状态的变化。比如当网卡收到数据包的时候,就会发出一个中断。我们通常所说的中断指的是硬中原创 2022-04-03 16:27:31 · 1601 阅读 · 0 评论