在java中模拟线程调度(stackless java?)

时间:2012-06-16 17:28:25

标签: java scheduling python-stackless stackless

对于一些学术研究,我需要模拟在单个处理器上运行的多个线程。

我希望能够在我的代码中插入* call_scheduler()*调用,其中当前的“线程”将暂停(记住它在哪个代码行中),并且一些调度函数将决定放弃哪个线程。

在python中,这可以使用无堆栈python整齐地实现。有替代品吗?

我可以使用真正的线程和一些消息队列(或管道)来实现它,这将只强制一次运行一个线程 - 但这是一个丑陋且有问题的解决方案。

3 个答案:

答案 0 :(得分:1)

对于协作用户线程,您可以使用Apache javaflow continuation: http://commons.apache.org/sandbox/javaflow/

我有兴趣了解如何使用此延续包

实现抢占式调度程序

答案 1 :(得分:1)

像Akka这样的Scala actor框架就是这样做的。每个线程处理许多演员,这是他们如此有效地创建的。我建议你看看他们的源代码。

答案 2 :(得分:0)

你的问题:

我可以使用真实线程和一些消息队列(或管道)that will force only one thread to run at a time来实现它 - 但这是一个丑陋且有问题的解决方案

如果您希望一次只运行一个线程,通过以更干净的方式控制线程对对象的访问,然后使用Semaphores in java.util.concurrent package.

Semaphores sem = new Semaphores(1); // 1这里将标记只有一个线程可以访问

使用sem.acquire() to get the key of the object, and when its done, use sem.release()然后只有另一个线程可以访问此对象。