![]() |
Модераторы: xvr |
![]() ![]() ![]() |
|
Wolf |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 90 Регистрация: 9.6.2006 Где: Нижневартовск Репутация: нет Всего: нет |
Доброго времени суток! Каким образом во FreeBSD управление можно передать другому (следующиму) потоку?
Вот скажем есть у меня бесконечный цикл:
|
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 16 Всего: 110 |
не уверен что правильно понял вас... вам нужно выполнение какой-то функции распределять между потоками? если да, то так:
это простой вариант. в нем возможно создание слишком многого кол-ва потоков. за этим нужно следить самому. суть в том, что просто создаются потоки, кол-во которых, можете задавать произвольно. шедулер ОС сам распределит их. потоки сами будут удаляться тогда, когда вернется управление из somefunction(). правильный вариант - использовать boost::asio::io_service в связке с boost::thread_group. Это сообщение отредактировал(а) boostcoder - 28.8.2010, 16:14 |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
Wolf,
sched_yield Добавлено через 1 минуту и 25 секунд boostcoder, я вообще не понимаю, зачем приводить такие примеры? -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 16 Всего: 110 |
||||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
boostcoder,
у автора даже намека нет на использование boost'а это раз (да и вообще, в этом разделе форума советовать boost как-то не кошерно, имхо) во-вторых, если не поняли вопрос, уточните смысл телепатии с не имеющим отношения к сути вопроса кодом? -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 16 Всего: 110 |
а это что ,что-то из ряда вон выходящее? я и предположил, что возможно не верно понял задачу.. как минимум, никому от этого не хуже. Это сообщение отредактировал(а) boostcoder - 28.8.2010, 23:16 |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
boostcoder,
Нет, это не что-то из ряда вон выходящее просто boost это не та либа, которую в принципе можно сувать (ака предлагать) куда/где попало: есть куча всяких задач, начиная с использования только С и заканчивая специфическими окружениями, где boost не применим Короче, считаю пример бессмысленным в плане пользы автору от него...проехали в общем -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
Wolf |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 90 Регистрация: 9.6.2006 Где: Нижневартовск Репутация: нет Всего: нет |
Пример номер два. С ним, я думаю, будет яснее.
В любой операционной системе данный код приведёт к 100% загрузке процессора (или ядра на котором код выполняется) (пример - прикреплённый рисунок). Мне нужно избавиться от 100% загрузки процессора. И так, что можно для этого вставить в цикл while (true) {} ? Присоединённый файл ( Кол-во скачиваний: 7 ) ![]() |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
я же сказал, sched_yield
-------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
Wolf |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 90 Регистрация: 9.6.2006 Где: Нижневартовск Репутация: нет Всего: нет |
MAKCim, большое спасибо! Не заметил сразу.
|
|||
|
||||
Wolf |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 90 Регистрация: 9.6.2006 Где: Нижневартовск Репутация: нет Всего: нет |
Что-то это не помогает. В top смотрю, разница лишь в том, что с sched_yield система грузит проц под 100%, а без sched_yield, приложение. А как можно на очень короткое время переводить процесс или поток в ожидание?
|
|||
|
||||
REZiaMIX |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 346 Регистрация: 3.11.2007 Репутация: нет Всего: 4 |
Ожидание: nanosleep. Вы что то не правильно делаете, такой цикл вообще использовать не стоит. Думаю тут надо думать другим путем, ошибка в архитектуре. -------------------- ![]() |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
Wolf,
это поможет если большинство процессов не ограничены вводом-выводом в противном случае просто некому грубо говоря передать управление и оно переходит обратно к вызывающему потоку -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
Wolf |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 90 Регистрация: 9.6.2006 Где: Нижневартовск Репутация: нет Всего: нет |
У меня не while(true), а примерно такое в потоках, занимающихся IO сокета:
Скорее всего я не правильно понимаю работу планировщика. В общем если в цикле ваил тру есть, что считать, например i++, и процессор свободен, то вот, собственно говоря он и считает на 100% ресурса процессора. Как то так, видимо. |
|||
|
||||
djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 1 Всего: 39 |
Wolf, man select, man epoll, man poll.
-------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С/С++: Программирование под Unix/Linux" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |