对于一些学术研究,我需要模拟在单个处理器上运行的多个线程。
我希望能够在我的代码中插入 *call_scheduler()* 调用,其中当前的“线程”将暂停(记住它在哪个代码行中)并且一些调度函数将决定放开哪个线程。
在 python 中,这可以使用无堆栈 python 巧妙地实现。有java替代品吗?
我可以使用真正的线程和一些消息队列(或管道)来实现它,这将强制一次只运行一个线程 - 但这是一个丑陋且有问题的解决方案。
对于一些学术研究,我需要模拟在单个处理器上运行的多个线程。
我希望能够在我的代码中插入 *call_scheduler()* 调用,其中当前的“线程”将暂停(记住它在哪个代码行中)并且一些调度函数将决定放开哪个线程。
在 python 中,这可以使用无堆栈 python 巧妙地实现。有java替代品吗?
我可以使用真正的线程和一些消息队列(或管道)来实现它,这将强制一次只运行一个线程 - 但这是一个丑陋且有问题的解决方案。
对于协作用户线程,您可以使用 Apache javaflow 延续: http ://commons.apache.org/sandbox/javaflow/
我很想知道如何用这个延续包实现一个抢占式调度程序
像 Akka 这样的 Scala 演员框架就是这样做的。每个线程处理许多演员,这就是他们如此高效地创建的方式。我建议看看他们的源代码。
你的问题:
我可以使用真正的线程和一些消息队列(或管道)来实现它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()
然后只有另一个线程将获得对该对象的访问权限。