首页
学习
活动
专区
圈层
工具
发布

2.中断和进程阻塞

本篇是多路复用相关的知识的第二篇文章,主要讲解中断和进程阻塞在整个网络数据传递过程中,所经历的过程。...二、进程阻塞 阻塞是进程调度的关键一环,指的是进程在等待某事件(如接收到网络数据)发生之前的等待状态,recv、select和epoll都是阻塞方法。 对于阻塞来说,是不占用CPU资源的。...下面我们看下“进程阻塞为什么不占用cpu资源?” 操作系统为了支持多任务,实现了进程调度的功能,会把进程分为“运行”和“等待”等几种状态。...操作系统会分时执行各个运行状态的进程,由于速度很快,看上去就像是同时执行多个任务。下面演示了这个运行和阻塞的调度情况。 ?...由于工作队列只剩下了进程B和C,依据进程调度,cpu会轮流执行这两个进程的程序,不会执行进程A的程序。 所以进程A被阻塞,不会往下执行代码,也不会占用cpu资源。 ?

2K31

【Linux】进程状态&&僵尸进程和孤儿进程&&阻塞、挂起和运行

因为直接在命令行中启动的进程,它的父进程是bash,bash会自动回收新进程的Z。 4. 进程的阻塞、挂起和运行 在网上找的一张进程状态图: 终止状态就等价于Z状态和X状态。...4.2 阻塞状态 在C语言中用过一个scanf,如果不往里面输入数据,会一直处于什么状态?...阻塞和运行的状态变化,往往伴随进程PCB被连入到不同的队列中。...4.3 挂起 操作系统在运行进程的时候内存时比较吃紧的,一旦进程出于阻塞状态,那么就意味着当前进程不会被调度,这个进程的代码和数据就不会被访问,此时就会把这个进程的代码和数据唤出到磁盘上。...这个进程的PCB还在内存中,只是它的代码和数据在磁盘的swap分区,此时把这种状态叫做阻塞挂起。 这样操作系统就会更合理使用内存资源。 在用户层是感知不到的。 频繁的换入换出,会导致效率问题。

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

    【Linux】深入 Linux 进程等待机制:阻塞与非阻塞的奥秘

    为什么需要进行进程等待 进程等待是多进程编程中至关重要的一部分,主要原因是为了让父进程正确管理子进程生命周期并避免各种问题。...避免僵尸进程,虽然子进程已经结束运行,但是它在进程中仍然回保留占位条目,需要父进程回收。 获取子进程的退出状态,用来判断子进程是否成功执行完成任务 2....如果子进程已经退出,调用wait/waitpid会立即返回,并且释放资源,获取子进程退出信息。 如果任意时刻调用wait/waitpid,子进程存在且正常运行,则可能阻塞。...3.解释堵塞与非堵塞 阻塞场景:打电话等朋友接听 你拨打朋友的电话,直到朋友接通之前你什么都做不了。这就像阻塞调用,你必须等着事情完成。...非阻塞场景:发消息等待回复 你给朋友发了个消息,等他们回你。你不用一直盯着手机看,而是可以去做别的事情,等收到消息后再查看。这就像非阻塞调用,你不需要等着完成才能做其他事情。

    85010

    并发-并行-阻塞-非阻塞-异步-同步-长连接-短连接-进程-线程-协程

    同步和异步 同步:进程之间的关系不是相互排斥临界资源的关系,而是相互依赖的关系。进一步的说明:就是前一个进程的输出作为后一个进程的输入,当第一个进程没有输出时第二个进程必须等待。...阻塞和非阻塞 阻塞请求,A调用B,A一直等着B的返回,别的事情什么也不干。 非阻塞请求,A调用B,A不用一直等着B的返回,先去忙别的事情了。...区别 阻塞和非阻最大的区别就是在被调用方返回结果之前的这段时间内,调用方是否一直等待。阻塞指的是调用方一直等待别的事情什么都不做。非阻塞指的是调用方先去忙别的事情。...但是多进程程序更健壮,多线程程序只要有一个线程死掉,整个进程也死掉了,而一个进程死掉并不会对另外一个进程造成影响,因为进程有自己独立的地址空间。...参考 https://www.cnblogs.com/littleswan/p/11368620.html 漫画编程:如何给女朋友解释什么是IO中的阻塞、非阻塞、同步、异步?

    1K10

    【Linux系统】掌握进程状态:运行阻塞暂停僵尸孤儿......

    S:睡眠状态,其实代表着阻塞状态或浅度睡眠状态(也叫可中断睡眠状态interruptible sleep),代表着进程在等待着某种事件完成(如执行sleep函数、scanf等待读取数据等) 进程的运行队列...换句话说,运行状态与阻塞状态的本质是:看进程的task_struct是在CPU还是其他硬件的调度队列中! 2....也就是说,只要子进程退出,父进程还在运行,但父进程没有读取到子进程的状态,子进程就进入僵尸状态。...孤儿进程 如果父进程提前退出了,那么子进程退出变成僵尸进程后该怎么办呢?此时这个子进程就称为孤儿进程。...如果内存资源还是不足,系统会使阻塞状态S的进程也挂起到swap分区,称之为“阻塞挂起”。

    25110

    15分钟读懂进程线程、同步异步、阻塞非阻塞、并发并行,太实用了!

    一个正在运行的应用程序在操作系统中被视为一个进程,进程可以包括一个或多个线程。 线程是操作系统分配处理器时间的基本单元,在进程中可以有多个线程同时执行代码。...进程之间是相对独立的,一个进程无法访问另一个进程的数据(除非利用分布式计算方式),一个进程运行的失败也不会影响其他进程的运行,Windows系统就是利用进程把工作划分为多个独立的区域的。...线程(Thread): 是进程中的基本执行单元,是操作系统分配CPU时间的基本单位,一个进程可以包含若干个线程,在进程入口执行的第一个线程被视为这个进程的主线程。...进程和线程的区别 进程和线程的主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。...至此,关于进程线程、同步异步、阻塞非阻塞、并发并行已经讲的差不多了,有讲的不好的地方请大佬指出。同时也谢谢网上大佬的文章帮助我理解了这些概念。

    9K66

    Java多线程 (Part3: 线程、进程原理、阻塞队列)

    ,Cusomer端所有线程被自动阻塞,直到有数据放入队列队列塞满数据,Producer端所有线程被自动阻塞,知道队列中有空的位置阻塞队列的主要方法插入 -- add(e)抛出异常 -- offer(e)...特殊值 -- put(e)阻塞 -- offer(e,time,unit)超时移除 -- remove()抛出异常 -- poll()特殊值 -- take()阻塞 -- pool(time,unit)...: 由链表组成的有界阻塞队列 (两个独立锁提高并发)PriorityBlockingQueue: 支持优先级排序的无界阻塞队列 (compareTo 排序实现优先)DelayQueue: 使用优先级队列的无界阻塞队列...process堵塞Java 线程调度 (抢占式调度)JVM线程采用抢占式调度;优先级越高越先执行;优先级高不代表可以独自占用CPU时间片线程让出CPU情况线程主动放弃CPU线程因为某些原因被阻塞线程运行结束进程调度算法优先调度算法...First Come First Service 先来先服务Short Job First 短作业(进程)优先调度Short Process First 短进程优先高优先权优先调度算法非抢占式优先权算法抢占式优先权调度算法高响应比优先调度算法基于时间片的轮转调度算法

    43810

    Java程序员的日常 —— 多进程开发IO阻塞问题

    背景故事 需求:“使用进程方式启动另一个程序!” 开发:“OK! Runtime.getRuntime().exec("xxxx")” 需求:“启动以后能看到输出消息不!” 开发:“OK!”...但是上面的程序中,使用了同步的方式输出子进程的消息,结果就导致了子进程阻塞。...阅读API —— 什么是ProcessBuilder ProcessBuilder用于创建操作系统进程,每个ProcessBuilder实例都管理一个进程属性集合。...通过调用start()方法,可以通过这些属性创建出一个进程。start()方法可以被多次调用,来创建多个独立的进程。...每个builder管理着下面的进程属性: cmmand 命令,比如{“ipcofig”,"/all"} environment 环境变量,子进程会直接使用当前进程的环境变量。

    1.6K50

    同步、异步、阻塞、非阻塞

    同步过程中进程触发IO操作并等待或者轮询的去查看IO操作是否完成。异步过程中进程触发IO操作以后,直接返回,做自己的事情,IO交给内核来处理,完成后内核通知进程IO完成。...阻塞与非阻塞   应用进程请求I/O操作时,如果数据未准备好,如果请求立即返回就是非阻塞,不立即返回就是阻塞。简单说就是做一件事如果不能立即获得返回,需要等待,就是阻塞,否则就可以理解为非阻塞。...阻塞 阻塞调用是指调用结果返回之前,当前线程会被挂起。函数只有在得到结果之后才会返回。有人也许会把阻塞调用和同步调用等同起来,实际上它们是不同的。...非阻塞 非阻塞和阻塞的概念相对应,指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回。...同步/异步与阻塞/非阻塞的组合 同步阻塞形式: 等待执行结果是一直等待,执行时线程挂起(未对fd 设置O_NONBLOCK 标志位的read/write 操作) 同步非阻塞形式:等待执行结果是一直等待,

    3.7K40

    同步异步,阻塞非阻塞

    什么是同步和异步 同步和异步是针对应用程序和内核的交互而言的, 同步指的是用户进程触发IO操作并等待或者轮询的去查看IO操作是否就绪,而异步是指用户进程触发IO操作以后便开始做自己的事情,而当IO操作已经完成的时候会得到...什么是阻塞和非阻塞 阻塞和非阻塞是针对于进程在访问数据的时候,根据IO操作的就绪状态来采取的不同方式,阻塞方式下读取或者写入函数将一直等待,而非阻塞方式下,读取或者写入函数会立即返回一个状态值。...内核应用程序  同步执行,阻塞/非阻塞。用户进程/线程无法直接读写内核数据,需要数据在用户空间和内核空间搬来搬去。除非个别接口,否则一般是同步的。...可以是阻塞或非阻塞,阻塞则一直在等待内核/应用程序把IO数据准备好,非阻塞则是直接返回内核/应用程序是否已经准备好数据。 应用程序框架:同步或异步。...IO多路复用,同步,异步,阻塞和非阻塞 区别 关于异步,同步,阻塞与非阻塞 解读I/O多路复用技术

    3.8K60

    阻塞 & 非阻塞 | 同步 & 异步

    这里讲的都是基于IO的 阻塞、非阻塞、同步、异步 ---- 一个典型的IO操作包括了两个阶段,数据准备和数据读写。比如说现在要使用 recv 执行一个读操作,数据就绪就是远端是否有数据可读。...当IO工作在阻塞状态下的时候,如果数据没有就绪,recv就会阻塞当前线程;如果说IO工作在非阻塞状态下,会立即返回。...一个同步IO接口的示例: char buf[1024]; int sz = recv(sockfd,buf,1024,0); //阻塞:一直在这儿死等 //非阻塞:时不时的回来问一下 if(sz>0)...仅被 lio_listio() 函数使用 */ /* Various implementation-internal fields not shown */ }; 陈硕大神说:在处理IO的时候,阻塞和非阻塞都是同步...---- 五种IO模型 阻塞: 非阻塞: 多路IO复用 信号驱动: 这里就完全放飞自我了 异步: ---- Reactor反应堆模型 One loop per thread

    3.5K10

    进程的基本状态及转换和阻塞及挂起的理解【转】

    阻塞状态:一个进程正在等待某一事件发生(例如请求I/O而等待I/O完成等)而暂时仃止运行,这时即使把处理机分配给进程也无法运行,故称该进程处于阻塞状态。...活跃阻塞:指进程在主存中。一旦等待的事件产生,便进入活跃就绪状态。 静止阻塞:指进程对换到辅存时的阻塞状态。一旦等待的事件产生,便进入静止就绪状态。 进程转换状态图 三种基本状态转换图: ? ?...阻塞及挂起的理解 挂起是一种主动行为,是把一个进程从内存转到外存,而阻塞则是一种被动行为(并不绝对,看个人理解),是在等待事件或资源时任务的表现。...对于挂起,其进程所有资源都转入外存;而阻塞,其进程所有资源依然保存在内存中。...而阻塞却没有对应的主动行为来解除,需要其他进程或系统唤醒。

    6.6K40

    阻塞与非阻塞的区别verilog_如何理解阻塞和非阻塞

    :”发送操作被阻塞了!!!...阻塞 阻塞调用是指调用结果返回之前,当前线程会被挂起。函数只有在得到结果之后才会返回。有人也许会把阻塞调用和同步调用等同起来,实际上它们是不同的。...非阻塞 非阻塞和阻塞的概念相对应,指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回。...对象的阻塞模式和阻塞函数调用 对象是否处于阻塞模式和函数是不是阻塞调用有很强的相关性,但是并不是一一对应的。...阻塞对象上可以有非阻塞的调用方式,我们可以通过一定的API去轮询状态,在适当的时候调用阻塞函数,就可以避免阻塞。而对于非阻塞对象,调用特殊的函数也可以进入阻塞调用。

    2.8K20

    阻塞和非阻塞的实现

    TCP_ESTABLISHED &&(flags & O_NONBLOCK)) return(-EINPROGRESS); // 早期通过关中断防止竞态情况 cli(); // 连接建立中,阻塞当前进程...while(sk->state == TCP_SYN_SENT || sk->state == TCP_SYN_RECV) { // 阻塞进程 interruptible_sleep_on...这也是非阻塞+事件驱动架构中的做法。因为这种架构下通常是单进程的,要避免阻塞进程,那么返回后什么时候才能知道连接成功呢?...这就是进程阻塞的原理,主要是两个过程 1 加入等待队列 2 让出CPU,调度其他进程执行。 我们这个进程什么时候被唤醒呢?我们从收到sync的回包开始分析。具体逻辑在tcp_rcv中。...另外我们看到,这里这是修改进程为可执行状态,但是不会立刻调度,要等下一次进程调度的时候才发生进程调度。以上就是进程阻塞和非阻塞的原理。

    2.9K20

    同步、异步、阻塞、非阻塞

    阻塞 阻塞调用是指调用结果返回之前,当前线程会被挂起。函数只有在得到结果之后才会返回。有人也许会把阻塞调用和同步调用等同起来,实际上他是不同的。...非阻塞 非阻塞和阻塞的概念相对应,指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回。...对象的阻塞模式和阻塞函数调用 对象是否处于阻塞模式和函数是不是阻塞调用有很强的相关性,但是并不是一一对应的。...阻塞对象上可以有非阻塞的调用方式,我们可以通过一定的API去轮询状态,在适当的时候调用阻塞函数,就可以避免阻塞。而对于非阻塞对象,调用特殊的函数也可以进入阻塞调用。...阻塞/非阻塞则是小明的等待方式,或者说 API 调用者的等待方式。 在不同的场景下,同步/异步、阻塞/非阻塞的四种组合都有应用。

    2.7K50
    领券