当前位置: 首页 > 面试题库 >

如何实现实用的光纤调度器?

颛孙玉石
2023-03-14
问题内容

我知道有关使用协程作为基础并实现玩具调度程序的基本知识。但是我认为它对于整个异步调度程序来说过于简单了。我的想法中缺少一整套漏洞。

如何防止cpu运行正在空闲/正在等待的调度程序?一些光纤刚刚进入睡眠状态,其他一些则等待来自操作系统的输入。


问题答案:

您需要将io操作复用到基于事件的接口(选择/轮询)中,以便可以利用OS进行等待,同时仍然可以调度其他光纤。select / poll具有超时参数-
对于要hibernate的光纤,您可以创建一个优先级队列,该优先级队列使用select / poll的该选项模拟hibernate呼叫。

尝试提供会阻塞操作的光纤(调用读/写/睡眠等)。除非您在本地线程中安排每根光纤,否则直接将无法工作-这超出了目的。

有关有效的实现,请参见http://swtch.com/libtask/。



 类似资料:
  • 有时您需要使用未维护的、旧的、脏的、巨大的、对我们的程序可能有危险的库。 是否有以安全方式执行此代码的最佳实践? 最近,我发现(可能是在我的知识和经验水平上)没有捕捉到异常。直到今天,我使用的常见做法是将代码包装到Fiber中,在内部捕获异常并通过Channel发送出去。现在它不工作(我不能把产量或Proc放在光纤中)。 危险的lib可以看起来像普通类,方法用Fiber.yield封装光纤,以便现

  • 我想知道,我怎么能设置回调光纤错误抛出。 例子: 我考虑在下次api访问时检查光纤:状态。或者创建一个光纤看门狗,如果我想要状态是有效的。这对我有用,但似乎不是最好的解决方案。

  • 所以我希望我的应用程序在一定的时间间隔内执行操作。在做了一点研究后,我在stackoverflow上找到了一些答案,它使我找到了这个链接,该链接称为固定RateTimer:这是该页面中的第一个示例 当我添加这段代码时,我得到了一个错误。 “表达式'fixedRateTimer'不能作为函数调用。找不到函数'invoke()'变量'fixedRateTimer'必须初始化” 我做了更多的研究并引进了

  • RR 调度算法实现 RR调度算法的调度思想 是让所有runnable态的进程分时轮流使用CPU时间。RR调度器维护当前runnable进程的有序运行队列。当前进程的时间片用完之后,调度器将当前进程放置到运行队列的尾部,再从其头部取出进程进行调度。RR调度算法的就绪队列在组织结构上也是一个双向链表,只是增加了一个成员变量,表明在此就绪进程队列中的最大执行时间片。而且在进程控制块proc_struct

  • 本文向大家介绍光纤和铜线的比较,包括了光纤和铜线的比较的使用技巧和注意事项,需要的朋友参考一下 由于与传统的铜线相比具有许多优点,因此光缆的使用量正在增加。但是,其用法也有一些缺点。 光纤电缆比铜线的优势 光纤电缆传输数据的速度远高于铜线。这是因为光的速度大于电子的速度。 与铜线的10 Gbps带宽相比,光缆的带宽更大,超过60 Tbps。 光纤电缆的衰减非常低。中继器仅需每50公里添加一次,而铜