5 / 5 / 0
Регистрация: 28.11.2010
Сообщений: 81
|
|
1 | |
Длительность обращения к переменным16.11.2011, 23:54. Показов 2872. Ответов 21
Метки нет (Все метки)
Товарищи, есть ли разница между локальными и глобальными переменными в длительности чтения/записи в них?
И еще такой вопрос: у меня несколько потоков работают с одной переменной. Имеет ли смысл для каждого из них создать свою копию этой переменной, чтобы они не обращались к одной и той же области памяти? Будет ли выигрыш в быстродействии?
0
|
16.11.2011, 23:54 | |
Ответы с готовыми решениями:
21
Используя идею обращения числовой матрицы написать программу для обращения булевой матрицы Длительность аудиофайла длительность сессии Длительность импульса |
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
|
|
17.11.2011, 00:01 | 2 |
локальные могут быть быстрее за счет того, что компилятор их расположит в регистрах процессора
глобальные же могут находиться только непосредственно в памяти однако момент сей слишком тонкий и незначительный так логика работы же поменяется вообщем это не то место, где нужно искать ускорение
0
|
5 / 5 / 0
Регистрация: 28.11.2010
Сообщений: 81
|
|
17.11.2011, 00:09 [ТС] | 3 |
Я юзаю POSIX. Допустим у меня два потока выполняют некоторые вычисления, причем в этих вычислениях постоянно участвует некоторый коэффициент k. Я могу его объявить глобально, присвоить ему значение, а дальше запустить свои два потока и в них его использовать, либо же я могу объявить его глобально, присвоить значение, запустить потоки, далее в самом начале потока объявить свою переменную, присвоить ей значение k и дальше все вычисления производить с ней. Разница только в том, что в первом случае оба потока постоянно будут лезть по одному адресу, а во втором каждый из них будет лезть по своему.
0
|
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
|
|
17.11.2011, 00:14 | 4 |
у каждого потока есть свой стек, то есть переменная будет в стеке
доступ к ней по скорости будет такой же как к глобальной все же я не представляю, чтобы можно было заметить разницу по времени обращения
0
|
5 / 5 / 0
Регистрация: 28.11.2010
Сообщений: 81
|
|
17.11.2011, 00:21 [ТС] | 5 |
Вопрос то мой в чем заключается: будут ли они конкурировать за глобальную переменную? В очередь становиться, если одновременно к ней обращаются? Или они будут ее параллельно считывать?
0
|
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
|
|
17.11.2011, 00:26 | 6 |
смотреть синхронизацию потоков
к переменной они могут обращаться как захотят
1
|
5 / 5 / 0
Регистрация: 28.11.2010
Сообщений: 81
|
|
17.11.2011, 00:33 [ТС] | 7 |
Так как они захотят к ней обращаться?) Для меня сейчас ключевой вопрос именно это.
0
|
1186 / 542 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
|
|
17.11.2011, 01:21 | 8 |
Svinina, асинхронно они с ней будут обращаться, когда процессу она понадобится - тогда и обратятся
1
|
385 / 229 / 12
Регистрация: 06.07.2011
Сообщений: 512
|
|
17.11.2011, 01:35 | 9 |
что значит "конкурировать"? какой процесс первый подаст команду на чтение переменной, тот и прочтет. и не о чем им конкурировать.
а вот запись-чтение переменной - совсем другое дело.
0
|
5 / 5 / 0
Регистрация: 28.11.2010
Сообщений: 81
|
|
17.11.2011, 01:38 [ТС] | 10 |
Gepar, а что произойдет, если два потока одновременно обратятся к одной и той же памяти? Одновременно они считают данные, или один поток подождет другого?
Добавлено через 2 минуты Ну под "конкуренцией" я понимаю соревнование за обладание неким ресурсом, одновременное обладание которым невозможно. Вообще, наверное, мой вопрос слишком низкоуровневый...
0
|
114 / 114 / 13
Регистрация: 29.04.2010
Сообщений: 240
|
|
17.11.2011, 02:02 | 11 |
Не будет просто так один поток другого ждать. Может такое случится, что один поток запишет половину данных, второй поток - вторую половину. В итоге полный бред в памяти и краш программы.
Гуглите синхронизацию потоков. Локи, мютексы и т.д. Тут все писать слишком уж долго.
0
|
5 / 5 / 0
Регистрация: 28.11.2010
Сообщений: 81
|
|
17.11.2011, 02:07 [ТС] | 12 |
Я сейчас не про запись, а про чтение.
При записи понятно, что без мьютексов не обойтись.
0
|
114 / 114 / 13
Регистрация: 29.04.2010
Сообщений: 240
|
|
17.11.2011, 02:11 | 13 |
С одновременным чтением проблем быть не должно. Если есть 100% гарантия что в эту переменную никто в это время не пишет.
1
|
5 / 5 / 0
Регистрация: 28.11.2010
Сообщений: 81
|
|
17.11.2011, 02:15 [ТС] | 14 |
По ходу ответ я так и не получу... Ладно, в любом случае спасибо всем, кто поучаствовал в обсуждении.
0
|
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
17.11.2011, 11:28 | 15 |
Не быстродействием занимайся, а назначением. Почему переменная одна? Если это способ обмена инфой между потоками, то после записи одним потоком, остальные должны получить результат, разделив переменную на копии ты будешь вынужден добавить ещё копирующий поток, который однозначно посадит на себя часть процессорного времени, которое можно было бы полезно использовать, прога тормознётся, если же переменная должна использоваться не для связи, а просто ты захотел использовать совпадающее имя, то разорвать связь, этой переменной создаваемую, можно только разделив переменную на копии.
Добавлено через 1 минуту Реализуемая механизмами синхронизации.
0
|
5 / 5 / 0
Регистрация: 28.11.2010
Сообщений: 81
|
|
17.11.2011, 20:02 [ТС] | 16 |
Переменная это коэффициент, используемый в вычислениях. Задается он один раз, при запуске программы, потоки ее только читают.
0
|
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
17.11.2011, 20:23 | 17 |
Быстрее, но совсем не то = хуже. Сначала надо сделать, что надо, а не что не надо, а потом быстрее/медленнее. Так вот, если тебе нужна одна переменная, то копии будут или тормознее, или не то. А если копии и нужны, то одна будет и не то и не быстрее.
0
|
5 / 5 / 0
Регистрация: 28.11.2010
Сообщений: 81
|
|
17.11.2011, 20:30 [ТС] | 18 |
taras atavin, я не понял, что ты написал.
0
|
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
17.11.2011, 20:40 | 19 |
Ну вот представь себе: ты хочешь съесть мороженное, а тебе предлагают пруд, поближе к дому, чем озеро. Барахтаясь в воде ты мороженное если и съешь, то времени уйдет больше. А если хочешь искупаться, то нафига сначала готовить мороженное?
0
|
5 / 5 / 0
Регистрация: 28.11.2010
Сообщений: 81
|
|
17.11.2011, 21:02 [ТС] | 20 |
taras atavin, ладно, еще раз объясню в чем состоял вопрос. Есть ячейка в памяти. В этой ячейке лежат данные. И есть два параллельных процесса, которые одновременно из этой ячейки пытаются считать данные. ВНИМАНИЕ, ВОПРОС: как данные из ячейки будут считаны процессами? Параллельно, или последовательно? Все, больше меня ничего не интересует, ни алгоритм, ни альтернативные способы организации параллельности, ни синхронизация, забудь про все это.
0
|
17.11.2011, 21:02 | |
17.11.2011, 21:02 | |
Помогаю со студенческими работами здесь
20
WMP (длительность) Длительность mp3 длительность песочницы Найти длительность сигнала Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |