首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

深度好文|面试官:进程和线程,我只问这19个问题

自愿型错误退出 强制型致命错误退出 强制型被其它进程杀死退出 10 进程都有什么状态?...系统调用创建一个新进程后,需要决定是运行父进程还是运行子进程 一个进程退出时需要做出调度决策,需要决定下一个运行的是哪个进程 当一个进程阻塞在I/O和信号量或者由于其它原因阻塞时,必须选择另一个进程运行...最短作业优先 该调度算法是非抢占式的算法,每个进程执行期间不会被打断,每次都选择执行时间最短的进程来调度,但问题来了,操作系统怎么可能知道进程具体的执行时间呢,所以该算法注定是基于预测性质的理想化算法,...最短进程优先 交互式系统中应用最短进程优先算法其实是非常适合的,每次都选择执行时间最短的进程进行调度,这样可以使任务的响应时间最短,但这里有个任务,还没有运行呢,我怎么知道进程的运行时间呢?...进程的每次变化都会有相应的状态,而操作系统维护了一组状态队列,表示系统中所有进程的当前状态;不同的状态有不同的队列,有就绪队列阻塞队列等,每个进程的PCB都根据它的状态加入到相应的队列中,当一个进程的状态发生变化时

90020
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Python全网最全基础课程笔记(六)——循环结构

    只要count小于5,循环就会继续执行。每次循环结束时,count的值都会增加1,直到它不再小于5,循环结束。...break # 密码正确时退出循环 else: print("密码错误,请重试。") 运行结果 请输入密码: 123 密码错误,请重试。...异常处理:如果__next__()方法引发StopIteration异常,则表示没有更多的元素可供迭代,循环结束。 循环体执行:在每次迭代中,都会执行循环体内的代码。...else语句 在Python中,循环结构(for循环和while循环)支持一个可选的else子句,它指定了在循环正常结束时(即不是因为break语句而退出)要执行的代码块。...使用场景 当你想要在循环结束后(但前提是循环没有通过break语句提前退出)执行一些代码时,可以使用else子句。 它常用于搜索场景,比如当你想在循环结束时报告是否找到了某个元素。

    8210

    有史以来最全的异常类讲解没有之一!爆肝3万字,终于把Python的异常类写完了!最全Python异常类合集和案例演示,第一部分

    异常,程序将继续运行 # 但通常,在捕获到 SystemExit 后,你应该考虑让程序正常退出,或者执行一些清理工作 # 然后重新引发异常或使用其他方式退出程序...#raise:这是一个被注释掉的代码行,如果取消注释,它将重新引发 SystemExit 异常,导致程序退出。 finally::无论是否发生异常,finally 块中的代码都会执行。...消息,并且程序会立即停止运行。 注意:由于这个脚本包含一个无限循环,所以如果你没有按下Ctrl+C来中断它,它将永远运行下去。...当迭代器尝试获取超出列表长度的下一个元素时,它引发了StopIteration异常,该异常被try…except块捕捉,并打印出一条消息表示迭代已完成。然后,break语句退出while循环。...运行结果 当运行上述代码时,程序会等待用户输入。用户可以输入任意数量的行,每行输入后程序都会打印出输入的内容。

    15810

    进程?线程?小朋友你是否有很多问号?

    程序是产生进程的基础 程序的每次运行产生不同的进程 进程是程序功能的体现 通过多次执行,一个程序可对应多个进程;通过调用关系,一个进程可包括多个程序 0 3 进程和程序有什么区别?...自愿型错误退出 强制型致命错误退出 强制型被其它进程杀死退出 10 进程都有什么状态?...最短作业优先 该调度算法是非抢占式的算法,每个进程执行期间不会被打断,每次都选择执行时间最短的进程来调度,但问题来了,操作系统怎么可能知道进程具体的执行时间呢,所以该算法注定是基于预测性质的理想化算法,...最短进程优先 交互式系统中应用最短进程优先算法其实是非常适合的,每次都选择执行时间最短的进程进行调度,这样可以使任务的响应时间最短,但这里有个任务,还没有运行呢,我怎么知道进程的运行时间呢?...进程的每次变化都会有相应的状态,而操作系统维护了一组状态队列,表示系统中所有进程的当前状态;不同的状态有不同的队列,有就绪队列阻塞队列等,每个进程的PCB都根据它的状态加入到相应的队列中,当一个进程的状态发生变化时

    76820

    关于“Python”的核心知识点整理大全14

    Python首次执行while语句时,需要将message的值与'quit'进行比较,但此时 用户还没有输入。如果没有可供比较的东西,Python将无法继续运行程序。...首次遇到这个循环时,message是一个空字符串,因此Python进入这个循环。执行到代码行 message = input(prompt)时,Python显示提示消息,并等待用户输入。...= 'quit': print(message) 现在,程序在显示消息前将做简单的检查,仅在消息不是退出值时才打印它: Tell me something, and I will repeat...在复杂的程序中, 如很多事件都会导致程序停止运行的游戏中,标志很有用:在其中的任何一个事件导致活动标志 变成False时,主游戏循环将退出,此时可显示一条游戏结束消息,并让用户选择是否要重新玩。...7.2.5 在循环中使用 continue 要返回到循环开头,并根据条件测试结果决定是否继续执行循环,可使用continue语句,它 不像break语句那样不再执行余下的代码并退出整个循环。

    12410

    如何安装Python 3.13?使用交互式解释器

    当我完成使用解释器时,我总是会键入 exit,但总是会收到错误提示。 在 Python 3.13 之前,它完全是 让-保罗·萨特和没有 退出。...改进的错误消息 坦白地说:当我刚开始学习 Python 时,我不知道在使用文件名时需要小心。例如,我将创建一个使用随机库模块的应用程序,并将文件命名为 random.py。...然后,我尝试运行代码,但只收到一条非常神秘的消息,没有告诉我哪里错了。 我当时并不知道问题出在文件名上。最终我发现了问题,更改了文件名并重新运行了应用程序,没有问题。显然,错误不在代码本身。...让我们来体验一下我们改进的错误消息功能。我们将继续使用我们的 numpy.py 示例。如果我尝试运行该应用程序,我知道我会因为文件名而收到错误消息。...可执行脚本 另一个很酷的功能是能够在 Linux 上使 Python 脚本可执行,而无需使用 python3 运行它。为此,您必须在代码顶部添加以下行: #!

    32710

    Go语言中常见100问题-#76 time.After and memory leak

    在某个时间到后执行某个动作可以用time.After来实现,它使用起来非常方便,在并发程序中用的比较多。...从通道ch获取到了消息 2. 已经有1个小时没有从ch获取到消息。因为每次循环执行select时都会对time.After进行求值计算,也就是每次都会重置超时。这段代码有什么问题吗?...例如这种情况,在通道ch每次都有消息的时候,在1个小时内会一直走case event := 每次运行select时也会对time.After(time.Hour)执行求值,每次申请的通道资源在超时...函数签名如上,这里返回的是执行close(ch)操作, 编译是通不过的,会报下面的错误。...在生产级别的代码中,应该有退出条件,例如在上下文取消的时候。在goroutine退出的时候,记得通过使用defer timer.Stop()停止创建的time.Timer.」

    66930

    Swoole 学习:协程、线程、IO多路复用、PHP多进程。

    一个fork子进程的基础示例: $pid = pcntl_fork(); /*父进程和子进程都会执行下面代码*/ if ($pid == -1) { /*错误处理:创建子进程失败时返回-...信号是在Unix System V中首先引入的,它实现了15种信号,但很不可靠。BSD4.2解决了其中的许多问题,而在BSD4.3中进一步加强和改善了信号机制。但两者的接口不完全兼容。...在Posix 1003.1标准中做了一些强行规定,它定义了一个标准的信号接口,但没有规定接口的实现。目前几乎所有的Unix变种都提供了和Posix标准兼容的信号实现机制。...,如果僵尸进程过多,导致系统没有可用的进程表项,于是再也无法运行其他的程序 4.孤儿进程  孤儿进程指的是在其父进程执行完成或被终止后仍继续运行的一类进程。...孤儿进程没有任何危害,只是需要注意自己的代码逻辑即可. 5.守护进程  守护进程(daemon)是一类在后台运行的特殊进程,用于执行特定的系统任务。

    66360

    Python 自动化指南(繁琐工作自动化)第二版:十一、调试

    这比全速运行程序要慢得多,但它有助于在程序运行时看到程序中的实际值,而不是从源代码中推断出可能的值。 引发异常 每当 Python 试图执行无效代码时,都会引发异常。...Mu 的调试器 调试器是 Mu 编辑器、IDLE 和其他编辑器软件的一个特性,它允许你一次执行一行程序。调试器将运行一行代码,然后等待您告诉它继续。...例如,如果下一行代码调用了一个spam()函数,但您并不真正关心这个函数内部的代码,您可以单击“跳过”以正常速度执行函数中的代码,然后在函数返回时暂停。...您不希望在if语句行上设置断点,因为if语句是在循环的每次迭代中执行的。当您在if语句中的代码上设置断点时,调试器只有在执行进入if子句时才会中断。 带有断点的那一行旁边会有一个红点。...您可以添加哪一行代码来禁用程序中的所有日志消息? 为什么使用日志消息比使用print()显示相同的消息更好? 调试器中的“单步执行”、“单步执行”和“单步退出”按钮有什么区别?

    1.5K40

    后台开发:核心技术与应用实践--线程与进程间通信

    它可能重复对互斥对象锁定和解锁,每次都会检查共享数据结构,以查找某个值。但这是在浪费时间和资源,而且这种繁忙查询的效率非常低。...当读写锁是写加锁状态时,在这个锁被解锁之前,所有试图对这个锁加锁的线程都会被阻塞 当读写锁在读加锁状态时,所有试图以读模式对它进行加锁的线程都可以得到访问权,但是以写模式对它进行加锁的线程将会被阻塞 当读写锁在读模式的锁状态时...但是,子进程并没有复制代码段,而是和父进程共用代码段。代码段是只读的,不存在被修改的问题。...孤儿进程,是指一个父进程退出后,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。...消息队列 消息队列用于运行于同一台机器上的进程间通信,它和管道很相似,是一个在系统内核中用来保存消息的队列,它在系统内核中是以消息链表的形式出现,消息链表中节点的结构用msg声明 消息队列跟有名管道有不少的相同之处

    1.4K30

    Go 专栏|错误处理:defer,panic 和 recover

    原文链接: Go 专栏|错误处理:defer,panic 和 recover 最近校招又开始了,我也接到了一些面试工作,当我问「你觉得自己有什么优势」时,十个人里有八个的回答里会有一条「精力充沛,能加班...defer 延迟函数调用,defer 后边会接一个函数,但该函数不会立刻被执行,而是等到包含它的程序返回时(包含它的函数执行了 return 语句、运行到函数结尾自动返回、对应的 goroutine panic...= nil { return err } defer f.Close() } 一种解决办法是将循环体单独写一个函数,这样每次循环的时候都会调用关闭函数。...但还有一些错误比较严重的,比如数组越界访问,程序会主动调用 panic 来抛出异常,然后程序退出。 如果不想程序退出的话,可以使用 recover 函数来捕获并恢复。...使用 panic 一般有两种情况: 程序遇到无法执行的错误时,主动调用 panic 结束运行; 在调试程序时,主动调用 panic 结束运行,根据抛出的错误信息来定位问题。

    35700

    Docker,请做好自己的清理工作

    但是,我们在使用Docker时碰到的一个问题是它的疯狂的占用磁盘的情况。我们在Amazon Linux上运行Docker,并且我们有一个构建服务器来构建Docker镜像作为构建管道的一部分。...1.确保退出的容器被删除。 当Docker容器存在时,容器不会自动删除。您可以使用“docker ps -a”命令键查看所有容器,清理退出的容器,使用的命令如下。...docker rm - v $(docker ps - a - q - f status = exited) 这将删除退出的容器。-v标志表示所有不需要的容器都会被删除。...删除这些不需要的图像的命令是: docker rmi $(docker images - f “dangling = true” - q) 同样,如果你没有任何这样的映像,你可能会得到一个错误消息...当这个程序运行时,它会做删除所有不需要容积量的准备,然后释放你的磁盘空间。 4.我知道这很好,我每次都必须这样做吗?

    1.5K70

    文件与异常(三)

    异常 Python使用被称为异常的特殊对象来管理程序执行期间发生的错误。每当发生让Python不知 所措的错误时,它都会创建一个异常对象。...使用了try-except代码块时,即便出现异常,程序也将继续运行: 显示你编写的友好的错误消息,而不是令用户迷惑的traceback。...这个程序没有采取任何处理错误的措施,因此让它执行除数为0的除法运算时,它将崩溃: 程序崩溃可不好,但让用户看到 traceback 也不是好主意。...有时候,有一些仅在try代码块成功执行时才需要运行的的代码; 这些代码应放在else代码中。except代码块告诉Python,如果它尝试运行try代码块中的代码时引发了指定的异常,该怎么办。...如果用户知道要分析哪些文件,他们可能希望在有文件没有分析时出现一条消息,将其中的原因告诉他们。 如果用户只想看到结果,而并不知道要分析哪些文件,可能就无需在有些文件不存在时告知他们。

    1.2K60

    《Go语言入门经典》10~12章读书笔记

    在Go语言中,有一种约定是,如果没有发生错误,返回的错误值将为nil。 这让程序员调用方法或函数时,能够检查它是否像预期那样执行完毕。 10.2 理解错误类型 在Go语言中,错误是一个值。...,因此打印This is not executed的代码行根本没有机会执行。...函数slowFunc执行完毕后向通道c发送一条消息。 接收并打印这条消息。 由于没有其他的语句,因此程序就此退出。...message := make(chan string, 2) 这些代码创建一个可存储两条消息的缓冲通道。缓冲通道最多只能存储指定数量的消息,如果向它发送更多的消息将导致错误。...但如果没有收到消息呢?为此可使用超时时间。这让select语句在指定时间后不再阻塞,以便接着往下执行。 下面的程序添加了一个超时case语句,指定在0.5s内没有收到消息时将采取的措施。

    53810

    在 JavaScript 中通过 queueMicrotask() 使用微任务

    JavaScript 中的 promises 和 Mutation Observer API 都使用微任务队列去运行它们的回调函数,但当能够推迟工作直到当前事件循环过程完结时,也是可以执行微任务的时机。...下面的代码片段创建了一个函数,将多个消息放入一个数组中批处理,通过一个微任务在上下文退出时将这些消息作为单一的对象发送出去。...当微任务运行之时,等待它处理的可能是一个有若干条消息的数组。微任务函数先是通过 JSON.stringify() 方法将消息数组编码为 JSON。...此例的重要之处是微任务不在其所处的函数退出时,而是在主程序退出时被执行。 HTML JavaScript 以下代码用于记录输出。...这里的 doWork() 函数调用了 queueMicrotask(),但微任务仍在整个程序退出时才触发,因为那才是任务退出而执行栈上为空的时刻。

    3.2K10

    Nginx + VFP FastCGI初起步

    php-cgi-spawner 这个程序没有提供编译好的程序,有兴趣可以自己编译下,我在附件中提供这个编译好的程序,它的语法是: .....第一行:Lparameters cCmdline 我们都知道,所有程序都有命令行参数,但VFP程序一般都是有界面的,很少人以命令方式去运行,这行代码就是接受命令行的参数,但有人会问:我又不需要处理命令行...你的程序还没有运行就报错了,连你的错误处理程序on error都没运行就报错了,而加了这行代码,你的程序就不会出错了。...第二行 On Error quit 在运行时,我们不希望产生错误而让这个程序直接挂在服务器上,产生错误要立即退出程序。...也许你会奇怪为什么没有 Read EVENTS语句,这是我们传统VFP程序必需要写的一句,否则就会“一闪而过”,这是因为它只适用于桌面程序,需要此语句来激活Windows消息处理循环,响应键盘、鼠标的控制消息

    1.2K10

    sigterm信号_一文吃透 PHP 进程信号处理

    大家好,又见面了,我是你们的朋友全栈君。 背景 前两周老大给安排了一个任务,写一个监听信号的包。因为我司的项目是运行在容器里边的,每次上线,需要重新打包镜像,然后启动。...假设现在要上线,需要关杀掉容器,Docker给容器里跑的常驻进程发送一个信号,告诉它我10s后会将你关闭,假设现在已经过了9秒,常驻进程刚从队列中取出一条消息,1s内还没将后续逻辑执行完,进程就已经被杀了...文件 SIGQUIT 和SIGINT类似, 但由QUIT字符(通常是Ctrl-、来控制....进程在因收到SIGQUIT退出时会产生core文件, 在这个意义上类似于一个程序错误信 号 SIGFPE 8 建立CORE文件(浮点异常) SIGFPE 在发生致命的算术运算错误时发出....实际上大部分时间都没有信号产生,但ticks的函数一直会执行。如果一个服务器程序1秒中接收1000次请求,平均每个请求要执行1000行PHP代码。

    1.2K40

    Rust 语言入门

    更好的错误处理 无论您使用何种编程语言,都会发生错误。在 Rust 中,错误分为两个阵营:不可恢复的错误(坏的种类)和可恢复的错误(不太坏的种类)。 不可恢复的错误 Rust panic!...然后,我使用了 Rust 中一个名为 match 的特殊特性,该特性类似于 C 中的 switch 语句,但更强大。在本上下文中,我将 _f 与可能的错误值(Ok 和 Err)进行匹配。...这个spawn 示例与当前线程分离,这使该线程能生存到父线程退出之后。从父线程发出一条短消息后,我最后迭代了 JoinHandle 类型的矢量,并等待每个子线程退出。...然后,这些线程在不同的时间执行和退出,并标识线程的异步性质。 代码 7....对于集,为您提供了 HashSet 和 BTreeSet 结构(您会在映射结构后注意到它)。这些结构在没有值(仅有键)时很有用,而且可以轻松地撤销已插入的键。

    1.2K10

    窗口结束不断循环的线程

    当程序有循环线程时,窗口关闭时(通过窗口右上角X按钮),重新启动程序失败,提示是否执行上一次结果,每执行上一次结果,就积累一个线程在编译器,因为程序没有完全关闭。...但事实上有时候并不是这样的,关闭窗口,只是停止了当前窗口的消息循环。...如果运行中我关闭子窗体,发现窗体虽然关闭了,但子窗体中的循环程序却没有退出,一直在 执行,并占用着系统资源,直到循环结束,才真正的释放资源。...我感觉最好方法的就是,在子窗体的Closing事件中,写循环退出条件,这样就可以避免某些未知的错误,而且可以只关闭子窗体,并释放子窗体占用的资源 1.Application.Exit(): 方法停止在所有线程上运行的所有消息循环...(无论在主线程和其它线程,只要执行了这句,都可以把程序结束干净) ? 把它放到窗口closed事件里。

    1.6K41
    领券