2012-06-16 4 views
3

Для некоторых научных исследований мне нужно смоделировать несколько потоков, работающих на одном процессоре.Имитация планирования потоков в java (неактивная java?)

Я хочу, чтобы иметь возможность вставлять * call_scheduler() * вызовы внутри моего кода, в которых текущий «поток» будет приостанавливаться (запоминание в какой строке кода) и какая-то функция планирования решит, какой поток отпустить ,

В python это может быть реализовано аккуратно с использованием несовместимого python. Есть ли альтернатива java?

Я мог бы реализовать его с использованием реальных потоков и некоторых очередей сообщений (или труб), которые будут запускать только один поток для запуска одновременно, но это уродливое и проблемное решение.

+0

Я думаю, что нет явного способа сделать это в java, вам нужно просто написать некоторые строки кода, и вы можете использовать семафоры и очереди очередности –

ответ

0

Ваш вопрос:

Я мог бы реализовать с использованием реальных потоков и некоторые очередей сообщений (или трубы) that will force only one thread to run at a time - но это некрасиво и проблематичным решение

Ну, если вы хотите только один поток для запуска в то время, управляя доступом резьбы на объекте в более чистой дороге, а затем использовать Semaphores in java.util.concurrent package.

Semaphores sem = new Semaphores(1); // 1 здесь будет означать, что только один поток может иметь доступ

use sem.acquire() to get the key of the object, and when its done, use sem.release(), тогда только другой поток получит доступ к этому объекту.

+0

Но я хочу иметь возможность управлять из потока планировщика, поток которого будет continue - так что мне понадобится массив семафоров, по одному для каждого потока. – Oren

+0

создать HashMap семафоров, поэтому вы можете идентифицировать их по их ключам, например first_thread, second_thread ... и т. Д. –

+0

Является ли нативный планировщик достаточно умным, чтобы понять, что все потоки ждут семафора, и только один поток может быть активным - поэтому нет причин останавливать его? – Oren

1

Для кооперативных потоков пользователей можно использовать Apache javaflow продолжений: http://commons.apache.org/sandbox/javaflow/

мне было бы интересно узнать, как реализовать упреждающий планировщик с этим продолжениями пакета

1

Scala актёры рамка как Акку сделать это. Каждый поток обрабатывает многие актеры таким образом, что они созданы так эффективно. Я рекомендую взглянуть на их исходный код.

Смежные вопросы