- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我在论坛上看到其他几个讨论这个 schedule() 函数的问题,但我的问题有点不同。我看过一些关于它的理论、算法和实现方面的讨论和文献。
不清楚和被问到的是执行方面。当然,深入查看内核源代码并进行所有必需的调试,跟踪 bla bla ... 可能会回答这个问题,但重新发明轮子似乎并不明智。
问题/困惑如下:
内核级的多线程用户程序遍历的路径是什么?
谁来调度线程?哪个中断上下文?任何名字? (如果我们在内核级别的跟踪中看到,没有什么叫做“sched”,但是有交换器、inits、ksoft* bla bla)Deos 它是这样的:
一个进程(用户程序)它的子线程首先都被内核占用,然后内核使它们成为可执行线程(通过将它们与 schedule() 和/或其他函数合并,即这个新的可执行线程有一些来自内核的指令可能来自 schedule()/others,与用户任务指令一起嵌入。这使得它在情况发生时自动调度)
或
schedule() 总是在某个协处理器上执行以观察并在必要时从该协处理器采取行动?这就是为什么有时当我们看到任何两个线程在 cpu 上切换时,只有交换器在其间以及之前和之后执行,也就是说,在那个级别没有所谓的调度程序,对吧?
感谢阅读,很抱歉写下我的困惑与大家分享。
最佳答案
X 或 Y - 都不是。
这些抢占式、多线程操作系统内核总体上大同小异。
看看它,(非常简单),像这样:
操作系统内核调度器/调度器是一个庞大、复杂的中断处理程序。中断,在操作系统方面有两种形式:
来自磁盘、网络、键盘、鼠标等外围设备的硬件中断。这些中断导致驱动程序运行,并且驱动程序在退出时可能会向内核请求调度运行。
来自线程的软件中断 - 可以更改线程状态的系统调用,例如。一个线程可能会请求不是立即可用的输入,因此该线程在输入可用之前不会继续运行。
当中断确实发生时,内核使用其内部状态数据以及来自中断的请求数据来运行其调度算法并决定哪些线程应在可用内核上运行。如果它决定正在运行的线程集需要更改,它可以通过使用内核间驱动程序导致运行线程的内核发生硬件中断来停止在任何内核上运行的任何线程。
如果没有中断,内核什么都不做。它不能做任何事情,因为它不是从任何地方输入的。它不需要在任何协处理器上执行。它不需要将任何调用“注入(inject)”到用户代码中。
它是一个状态机,以中断作为输入,一组正在运行的线程作为输出。
关于c - Linux 内核 : schedule() function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20679228/
有人可以看看我对 Quartz xml 的简单测试(每秒触发一次)并给我一个线索,为什么没有作业被添加到 sheduler 中?基本上我希望每秒触发“SimpleJob”类,我可以确定正在传递哪个作业
我创建了一个 Akka 的调度程序来每天按固定时间发送邮件(例如每天早上 6:00)。那么 Actor 怎么称呼呢?我的意思是我应该使用什么逻辑?谢谢。 最佳答案 只是计算现在和下一个下午 6 点之间
我正在使用 Quartz 调度,更具体地说是一个设置为每周每天晚上 10 点醒来的 cron 触发器。 我接触的另一个小组正在询问调度程序在一天中将唤醒多少次以检查它是否需要运行作业。晚上 10 点作
出现这些错误: 2018-01-22 18:00:59,797 [ServerService Thread Pool -- 79] ERROR org.quartz.ee.servlet.Quartz
出现这些错误: 2018-01-22 18:00:59,797 [ServerService Thread Pool -- 79] ERROR org.quartz.ee.servlet.Quartz
我对 Quartz Scheduler 工作线程有疑问。我创建了一个调度程序任务,它将每 3 小时执行一次。我创建了一份工作和一个触发器。当我执行这个调度程序时,我观察到一个奇怪的行为,同一个作业被分
我正在为我的网络应用程序实现 Quartz 调度程序。 我必须每周安排周一、周二重复 3 周 Quartz Scheduler 中的两种方式, 1)简单触发器: Trigger trigger = n
我正在使用 airbnb 的 Airflow ,我创建了一个简单的任务,如下所示。但是,即使我将间隔设置为每小时或任何其他间隔,调度程序仍会继续运行任务。我注意到的另一件事是,如果我将调度间隔设置为“
嗨,我是 Quartz Scheduler 的新手,我是第一次实现它。我想知道调度程序的开始调用是否会执行暂停的作业?或 暂停的作业只能通过恢复调用而不是其他任何方式来激活。请帮助我。 最佳答案 首先
如果我有一个运行着一堆触发器的 Quartz 调度程序,并且我想清除所有触发器,那么最好如何做到这一点? 我考虑过迭代组和名称,随时调用取消安排,但是当有数千个触发器到位时,这似乎非常慢(取消安排 1
嗨,我是 Quartz Scheduler 的新手,我是第一次实现它。我想知道调度程序的开始调用是否会执行暂停的作业?或 暂停的作业只能通过恢复调用而不是其他任何方式来激活。请帮助我。 最佳答案 首先
我在这里遇到了很多问题。我使用 ocLazyLoader 来加载完整的日历并且它运行良好,但是每当我尝试包含 fullCalendar-scheduler 时我在 JavaScript 中遇到这个错误
我最近在 Tardos 和 Kleinberg 的算法设计的第 4 章中阅读了有关间隔调度算法的内容。为间隔调度问题提供的解决方案是这样的: Sort the n intervals based on
如果一个进程被硬件中断(第一级中断处理程序)中断,那么 CPU 调度程序是否意识到这一点(例如,调度程序是否独立于被中断的进程计算硬件中断的执行时间)? 更多详情:我正在尝试解决以下问题:htop 中
为什么它们用于不同类型的任务?在处理计算任务与 io 任务时,它们有何不同? Schedulers.computation( ) - meant for computational work such
我在 couchbase 中使用 Observables。 Schedulers.io() 和 Schedulers.computation() 之间有什么区别? 最佳答案 RxJava调度器简介。
我遇到了一个可观察的问题: 在服务中我有一个函数(在 edit.component 中): public patchOne(entity: Tier): Observable { const
我正在研究 Flux 和 Mono,并在多线程环境中使用它们,并使用提供工作线程的 Schedular。 有很多选项可以使用 elastic、parallel 和 newElastic 来启动 Sch
FullCalendar 有一个名为 Scheduler 的附加组件,我正尝试将其与 PrimeNG-Schedule 组件一起使用。查看 PrimeNG 文档,有一个“选项”属性,我可以使用它向 F
我搜索了有关如何使用 Mass Transit 的 Quartz 集成 (https://github.com/MassTransit/MassTransit-Quartz) 的示例实现或博客文章。
我是一名优秀的程序员,十分优秀!