操作系统调度算法

3

如何为支持10K个并发线程,且具有低CPU使用率但高I/O负载的应用程序选择最佳算法?欢迎提供相关论文链接。


你对“最好”的定义是什么? - stephendl
此外,这似乎更像是一个计算机科学问题,而不是一个编程问题。我不会因为这个原因关闭它,但想提一下。甚至听起来有点像作业。 - John Saunders
5个回答

4
为什么不使用SCHED_RR?你自己说了:CPU使用率低。当你预计要进行大量I/O操作时,你甚至可以通过nice命令来降低进程的优先级,这样其他进程就会比你更频繁地被调度。
总的来说,为什么不让操作系统做它最擅长的事情,只需要关注编写高效的代码呢?操作系统会知道你正在进行阻塞I/O调用,并将你的线程/任务放入等待队列中选择另一个任务运行。你不需要担心这些细节。

那么,如果我想写自己的调度器代码,应该阅读哪些论文? - McGovernTheory
论文?我猜你可以查看 Tanenbaum 的《现代操作系统》中的“调度”章节。或者你可以阅读《深入理解 Linux 内核》中关于调度的内容。或者你可以查看 kernel/sched.c 中的 schedule() 函数——这可能是获取实际知识的最佳途径。 - FreeMemory

1

实际上,我认为没有任何调度机制能够完美地处理这么多线程,因为内核中的管理表会变得非常大。

如果可能的话,我建议重新编写应用程序,使用异步I/O、select()或类似的操作系统。


1

1

你的问题更与I/O调度相关,而非线程调度。Linux内核提供了各种I/O调度器实现。您可以在LWN的this edition中找到有关此主题的好文章。


0
正如Grover所建议的那样,您也可以使用一些线程池机制,这些机制资源消耗较少,并且至少在某种合理程度上解决了您的问题,即使不能完全解决。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接