2011-12-30 2 views
0

Я написал многопоточную программу с ptgread. Мой процессор двухъядерный. Но программа не работает как параллельная. Я подключил системный мониторинг следующим образом. Мой вопрос в том, поддерживает ли fedora13 многопоточность? enter image description hereмногопоточность в fedora

+0

Без кода, как кто-то должен помочь? – fge

+1

Обычные ядра Linux всегда поддерживают многопоточность, независимо от того, есть ли у вас многоядерный процессор или нет. Возможно, ваше предположение о том, что один поток будет выделен одному процессору, а другой - другому процессору, ошибочен? –

ответ

0

Ваш вопрос неполный, поэтому этот ответ может быть неэффективным. Будет пересматривать с дополнительной информацией.

Однако несколько советов, которые вы должны усовершенствовать.

  1. Подключиться к другим темам?
  2. Есть ли мертвый замок среди нитей, где обе нити эффективно спали?
  3. Влияет ли слишком много операций ввода-вывода? (Ожидание на патрубках, чтение, запись на диске, даже тяжелый printfs включает в себя это)
  4. ли какие-либо нитей длинные снов (USleep, nanosleep любой ..)

Если есть какие-либо из указанных выше условий true, даже если процессор доступен, потому что активному набору команд необходимо подождать, пока не будет выполнен эффективный задний журнал.

Второе ограничение на ваш вопрос - измерение. У вас есть диаграмма, которая представляет собой систему через put. Даже если у вас есть один процессор, переключение потоков может быть настолько прозрачным, потому что поток переключается в течение нескольких (10 или 100 секунд) миллисекунды. И если каждый из ваших потоков работает на одном процессоре - вы никогда не сможете видеть, когда эти потоки переключаются. Infact, который вы видите, разделяют не только ваши 2 потока - но так много процессов, которые работают в системе.

Но, как я уже сказал, я могу быть более эффективным, если вы дадите полную информацию.