2013-09-23 3 views
1

В многопоточном приложении Java, если я хочу определить инструкции, в которых происходит переход контекста из одного потока в другой, какой наилучший подход? Прибор каждой инструкции для определения того, какой поток выполняет инструкцию, даст близкое приближение. Например, если переключатель происходит после того, как контрольно-измерительная аппаратура выполнена и до фактического instr. , то результат будет неточным.Переключение контекста в Java

  • Есть ли способ точно определить местоположение коммутатора контекста (которое будет отличаться для разных прогонов) в Java?

  • Что является наиболее экономически эффективным для идентификации этого?

+2

Вы не можете сделать это в Java-коде. Вы должны сделать это с помощью крючков профилировщика. Позаботьтесь о том, зачем вам нужна эта информация? – Gray

+0

Я боюсь, что вы не понимаете потоковую или контекстную коммутацию. Эта функция выполняется в комбинации с JVM и операционной системой. В частности, контекстная коммутация, вероятно, выполняется операционной системой в отношении вызовов, связанных с мьютексом (например, 'futex' в Linux). Java не имеет никакого контроля над этим. Хотя возможно написать собственное приложение для переключения контекста (сохранение стека в середине вашего приложения), чтобы эмулировать потоки, нет никакой реальной необходимости делать это отдельно от самоопределения (но я пошел туда, и это было очень назидательно - но не на Java, это был C и ассемблер). –

+0

@Gray: Мне нужно сделать это, чтобы выполнить некоторый анализ. PP: Спасибо за ваши комментарии по моему пониманию резьбы. – user1539577

ответ

0

Короткий ответ на ваш вопрос You can not do it in java .Это является resposibility из виртуальной машины Java, чтобы переключить контекст, основанный на базовой операционной системы и модели памяти.

http://en.wikipedia.org/wiki/Thread_(computing)

+1

Не является ли ОС ответственной за контекст, переключая потоки, как указано [здесь] (http://stackoverflow.com/questions/17827332/how-to-schedule-java-threads?rq=1) – user1539577

0

Большинство переключения контекста вызваны внешними прерываниями (в том числе таймера). Это может произойти в инструкции any. Действительно, распределение не является четным, но очень случайным. Даже если бы вы могли собирать распределение вероятности переключения контекста для каждой инструкции, как бы вы ее использовали? Похоже, вы пытаетесь решить какую-то проблему с помощью неадекватных средств. Лучше расскажите, какова ваша настоящая проблема, и мы пытаемся предложить решение.

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