热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

调度程序如何知道线程被阻塞以等待输入?

如何解决《调度程序如何知道线程被阻塞以等待输入?》经验,为你挑选了1个好方法。

当执行用户代码的线程正在等待输入时,调度程序如何知道要中断输入或线程如何知道如何调用调度程序,因此,看到一个简单的单线程应用程序的普通程序员不太可能在各处插入sched_yield()。编译器是在优化时插入sched_yield()还是线程只是自旋锁定,直到调度程序设置的通用计时器中断触发,或者用户是否必须显式声明wait(),sleep()函数以使上下文切换?

这个问题是,如果调度不抢先因为那特别相关来电时,它在等待输入吞吐量是有效的调度,但我不知道它是如何做到这一点。



1> TypeIA..:

注意不要将抢先与进程的睡眠能力混为一谈。即使使用非抢占式调度程序,进程也可以进入睡眠状态。当进程正在等待I / O时,就会发生这种情况。该过程进行系统调用,例如,read()设备确定没有可用数据。然后,它通过更新调度程序使用的数据结构在内部使进程进入休眠状态。然后,调度程序将执行其他进程,直到发生唤醒原始进程的中断或其他事件。然后,唤醒的过程将再次具有进行计划的资格。

另一方面,抢占是体系结构的调度程序在没有协作的情况下停止进程执行的能力。中断可能发生在程序指令流中的任何位置。控制权返回到调度程序,然后调度程序可以执行其他进程,并稍后返回中断(抢占)进程。大多数调度程序会分配时间片,在该时间片中,进程可以运行预定的时间,如果优先级更高的进程需要时间片,则可以在此之后抢占。

除非您正在编写驱动程序或内核代码,否则您无需过多担心底层机制。在编写用户空间应用程序时,关键概念是:(1)一些系统调用可能会阻塞,这意味着您的进程将一直处于睡眠状态,直到事件发生为止;(2)在可抢占的系统(所有主流现代操作系统)上,程序可能是随时抢占,以便其他进程可以运行。

*请注意,在某些平台(例如Linux)上,线程实际上只是与另一个进程共享其虚拟地址空间的另一个进程。因此,调度程序将进程和线程完全相同地对待。


推荐阅读
  • 本文详细分析了JSP(JavaServer Pages)技术的主要优点和缺点,帮助开发者更好地理解其适用场景及潜在挑战。JSP作为一种服务器端技术,广泛应用于Web开发中。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • CentOS7源码编译安装MySQL5.6
    2019独角兽企业重金招聘Python工程师标准一、先在cmake官网下个最新的cmake源码包cmake官网:https:www.cmake.org如此时最新 ... [详细]
  • CMake跨平台开发实践
    本文介绍如何使用CMake支持不同平台的代码编译。通过一个简单的示例,我们将展示如何编写CMakeLists.txt以适应Linux和Windows平台,并实现跨平台的函数调用。 ... [详细]
  • 在Ubuntu 16.04 LTS上配置Qt Creator开发环境
    本文详细介绍了如何在Ubuntu 16.04 LTS系统中安装和配置Qt Creator,涵盖了从下载到安装的全过程,并提供了常见问题的解决方案。 ... [详细]
  • 本文深入探讨了Linux系统中网卡绑定(bonding)的七种工作模式。网卡绑定技术通过将多个物理网卡组合成一个逻辑网卡,实现网络冗余、带宽聚合和负载均衡,在生产环境中广泛应用。文章详细介绍了每种模式的特点、适用场景及配置方法。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 解决微信电脑版无法刷朋友圈问题:使用安卓远程投屏方案
    在工作期间想要浏览微信和朋友圈却不太方便?虽然微信电脑版目前不支持直接刷朋友圈,但通过远程投屏技术,可以轻松实现在电脑上操作安卓设备的功能。 ... [详细]
  • MySQL 数据库迁移指南:从本地到远程及磁盘间迁移
    本文详细介绍了如何在不同场景下进行 MySQL 数据库的迁移,包括从一个硬盘迁移到另一个硬盘、从一台计算机迁移到另一台计算机,以及解决迁移过程中可能遇到的问题。 ... [详细]
  • 深入理解Java泛型:JDK 5的新特性
    本文详细介绍了Java泛型的概念及其在JDK 5中的应用,通过具体代码示例解释了泛型的引入、作用和优势。同时,探讨了泛型类、泛型方法和泛型接口的实现,并深入讲解了通配符的使用。 ... [详细]
  • 本文详细记录了在银河麒麟操作系统和龙芯架构上使用 Qt 5.15.2 进行项目打包时遇到的问题及解决方案,特别关注于 linuxdeployqt 工具的应用。 ... [详细]
  • Linux设备驱动程序:异步时间操作与调度机制
    本文介绍了Linux内核中的几种异步延迟操作方法,包括内核定时器、tasklet机制和工作队列。这些机制允许在未来的某个时间点执行任务,而无需阻塞当前线程,从而提高系统的响应性和效率。 ... [详细]
  • 并发编程:深入理解设计原理与优化
    本文探讨了并发编程中的关键设计原则,特别是Java内存模型(JMM)的happens-before规则及其对多线程编程的影响。文章详细介绍了DCL双重检查锁定模式的问题及解决方案,并总结了不同处理器和内存模型之间的关系,旨在为程序员提供更深入的理解和最佳实践。 ... [详细]
  • CentOS 7 磁盘与文件系统管理指南
    本文详细介绍了磁盘的基本结构、接口类型、分区管理以及文件系统格式化等内容,并提供了实际操作步骤,帮助读者更好地理解和掌握 CentOS 7 中的磁盘与文件系统管理。 ... [详细]
author-avatar
文布得
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有