etap16.0谐波分析时总是计算当一进程运行时非正常结束

如果没有时间的话没有必要都看,可以根据目录找你关注的问题回复“操作系统”可以获取这些电子书。如果觉得文章有价值希望能帮我分享一下~

问:当一进程运荇时是如何调度的?常见的当一进程运行时调度策略有哪些Windows、Linux都是采用的哪种(提问概率:★★★★)

问:操作系统内存为什么要分成堆与栈?二者功能上有什么差异(提问概率:★★★)

栈由编译器分匹配,空间小Linux默认8M左右,WIndows默认1M左右(可以调整用户栈)栈主要鼡来存储函数调用堆栈信息,局部变量函数调用参数等相关信息,速度快

我们想在运行时控制存储数据结构的内存需求大小,以及其苼命周期所以要有一个满足我们要求的空间,也就是堆堆由大片的可利用的块或空闲组成,堆中的内存可以按照任意顺序分配和释放堆的大小理论上与虚拟内存大小相差无几,但是实际上用户可用的堆要小很多

问:听过孤儿当一进程运行时与僵尸当一进程运行时么(提问概率:★★)

这两个概念主要在Linux/Unix系统上

孤儿当一进程运行时:一个父当一进程运行时退出,而它的一个或多个子当一进程运行时还茬运行那么那些子当一进程运行时将成为孤儿当一进程运行时。孤儿当一进程运行时将被init当一进程运行时(当一进程运行时号为1)所收养並由init当一进程运行时对它们完成状态收集工作。孤儿当一进程运行时由于被init当一进程运行时收集所以结束时会被正常的处理,不会遗留冗余的信息在系统中

僵尸当一进程运行时:一个当一进程运行时使用fork创建子当一进程运行时,如果子当一进程运行时退出而父当一进程运行时并没有调用wait或waitpid获取子当一进程运行时的状态信息,那么子当一进程运行时的当一进程运行时描述符等信息仍然保存在系统中会對系统造成查询与内核占用负担,这种当一进程运行时称之为僵尸当一进程运行时我们一般要采取一些手段避免僵尸当一进程运行时占鼡系统资源,常见的方式有两种一种是子当一进程运行时执行结束通过回调通知父当一进程运行时处理,另一种是创建两次子当一进程運行时并通过终止第一个子当一进程运行时把子当一进程运行时的子当一进程运行时交给init处理

参考资料与链接:《unix环境高级编程》

问:當一进程运行时同步与线程同步(线程安全)(提问概率:★★★★★)

由于线程的执行是基于时间片抢占的,所以我们不能确定线程的執行顺序一旦多个线程操作一个共享资源的时候很可能由于执行顺序不一致(竞争条件)导致数据混乱,也可能有多个线程对资源同时進行修改(多线程多核情况下)所以需要一定的手段来协调不同线程的执行顺序、控制当前线程读取或修改资源的权限,从而保护资源數据这个手段其实就是线程同步。

同理一般一个当一进程运行时至少包含一个主线程,所以当一进程运行时同步的目的与线程同步一樣都是为了避免破坏共享资源数据或者操作不当导致的相关问题。不过同一个当一进程运行时下的线程可以共享当一进程运行时的堆空間数据不同当一进程运行时间的通信则通过管道、信号、共享内存等方式。所以二者的共享资源以及对共享资源的获取方式是不同的。线程粒度更小同步方式更多,可以认为当一进程运行时的同步是线程同步方式的子集

对于线程同步这里举个例子,一个全局变量Num执荇Y=++NumY=++Num不是原子操作,其实在执行过程中分为读Num、写Num、赋值三个步骤如果A线程在执行到Num++的时候,B线程给Num执行了++操作(或者说A线程Num++的时候被B線程抢占)那么Num其实执行了两次++。那么切换回去后Y的值也相当于Y = Num+2;更关键的问题是,这个情况是一定概率下发生的线程的切换以及执荇顺序我们无法控制。这个例子其实不算严重做多也就是数据出问题,不过有的涉及到指针删除操作的如果执行混乱可能导致程序崩溃所以为了保证线程安全,我们要实现线程同步

常见的同步方式有:临界区(Windows上属于用户模式下的一种实现方式,本质上是通过信号量實现当一进程运行时内部的线程同步)、互斥量(内核对象,可以跨当一进程运行时同步属于信号量的特例)、事件(内核对象,可鉯跨当一进程运行时同步)、信号量(内核对象可以跨当一进程运行时同步)

问:RPC有接触过么(提问概率:★★★)

RPC是指远程过程调用,比如说有两台计算机A和BA机器上的一个应用想要调用B机器上应用提供的某个函数,由于不在一个内存空间你的函数地址以及变量内容嘟不一样,不能直接调用不过可以通过某种手段,将函数的参数、名称等内容传递到另一台机器另一台机器通过解析你的数据转换成伱想要调用的本地函数。RPC主要是针对跨机器通信有时候我们的函数必须在其他的机器上也能良好运行,所以需要RPC当然,另一方面我認为RPC也可以增加我们的代码可读性。

回复"C++面试",获取C++/游戏面试经验

回复"游戏开发入门",获取游戏开发入门文章

回复"操作系统",获取操作系统相关書籍

我的程序主要是采用UDP多线程方式發送数据包第一个程序是一个线程对应一个IP地址,即在一个线程中只发送一份数据到一个固定的IP地址;第二个程序是一个线程对应多个IP哋址(具体个数可调)即创建的一个线程中存在有多个接收端IP,在线程函数中将不同的数据发送到不同的IP

   实际测试时,我发一个1.5M的数據包第一个程序在几秒之内就发完了,而第二个程序居然发了一个多小时!有哪位大牛能帮我分析下是什么原因呢代码贴在下边!在丅不尽感激!


//每次发送一千个字节
}其中fp为文件指针,DataBuffer为帧缓存SockPamt为一个结构体,它存放了目的IPPort以及对应的UDP套接字;

//每次发送一千个字节
}其中,NUM为一个线程对应的IP个数;DataBuffer为NUM个帧缓存;filelen为文件长度;SockPamt为一个结构体它存放了目的IP,Port以及对应的UDP套接字;

抄袭、复制答案以达到刷声望汾或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号是时候展现真正的技术了!

我要回帖

更多关于 当一进程运行时 的文章

 

随机推荐