Название: Функция sleep() Отправлено: blood_shadow от Август 28, 2011, 18:38 Немного запутался в деталях...
Допустим есть два потока Thread_A и главный поток, метод run() потока Thread_A определен так: Код
если модифицировать так: Код
Вопрос - задержка в выполнении потока Thread_A будет 2 сек. + задержка на выполнение самой ф-ции sleep(2); ? Спасибо Название: Re: Функция sleep() Отправлено: blood_shadow от Август 29, 2011, 15:55 В принципе разобрался помогла мне книга Джеффри Рихтера "Создание эффективных WIN32-приложений"
одно только осталось интересно при выполнении самой ф-ции sleep() поток прерывается? Название: Re: Функция sleep() Отправлено: brankovic от Август 29, 2011, 16:11 одно только осталось интересно при выполнении самой ф-ции sleep() поток прерывается? прерывается выполнение потока. Информация о потоке сохранятся и (примерно) через N секунд контекст потока снова активируется и поток продолжает работать. Название: Re: Функция sleep() Отправлено: Igors от Август 29, 2011, 16:22 прерывается выполнение потока. Информация о потоке сохранятся и (примерно) через N секунд контекст потока снова активируется и поток продолжает работать. Было бы неплохо узнать (в популярной форме) что то за "контекст" и что в него входит. Ну переключить стек, что еще? Смущает что адресное пр-во общее, откуда берутся (весьма существенные) затраты на усыпление/пробуждение нитки?Спасибо Название: Re: Функция sleep() Отправлено: blood_shadow от Август 29, 2011, 16:53 прерывается выполнение потока. Информация о потоке сохранятся и (примерно) через N секунд контекст потока снова активируется и поток продолжает работать. Было бы неплохо узнать (в популярной форме) что то за "контекст" и что в него входит. Ну переключить стек, что еще?Спасибо определена в WinNT.h: Код: typedef struct _CONTEXT Название: Re: Функция sleep() Отправлено: blood_shadow от Август 29, 2011, 16:55 мне вот такое еще интересно -
потоки создаются в адресном пространстве процесса, возможно ли насоздавать столько потоков что этого адресного пространства не хватит? и что тогда произойдет? Название: Re: Функция sleep() Отправлено: Igors от Август 29, 2011, 17:29 короче в ней сохраняются значения регистров процессора для конкретного потока, сама структура Затраты на сохранение регистров ничтожно малы, с таким "переключение контекста" все бы летало. Но этого не происходит - попробуйте устроить "интенсивную конкуренцию" и N процессоров будут медленнее одного. определена в WinNT.h: Так что давайте послушаем что скажет brankovic Название: Re: Функция sleep() Отправлено: blood_shadow от Август 29, 2011, 17:37 короче в ней сохраняются значения регистров процессора для конкретного потока, сама структура Затраты на сохранение регистров ничтожно малы, с таким "переключение контекста" все бы летало.определена в WinNT.h: Так что давайте послушаем что скажет brankovic Название: Re: Функция sleep() Отправлено: BRE от Август 29, 2011, 18:17 Было бы неплохо узнать (в популярной форме) что то за "контекст" и что в него входит. Ну переключить стек, что еще? Смущает что адресное пр-во общее, откуда берутся (весьма существенные) затраты на усыпление/пробуждение нитки? В google: intel tssОпять попробую предложить тебе непотребство... под названием книга... правда поправляет... ;) Спасибо Пожалуйста.Название: Re: Функция sleep() Отправлено: Igors от Август 29, 2011, 18:35 Вы имеете ввиду задержку 20 милисекунд на переключение потока? Не знаю откуда взялась эта цифра. но это много. Пример: всего-навсего "потокобезопасный вектор" (или др контейнер), одни нитки пишут, др. читают. Себестоимость единичных записи/чтения куда меньше миллисекунды - значит все будет сожжено на блокировках.Опять попробую предложить тебе непотребство... под названием книга... правда поправляет... ;) Откуда такая уверенность что я совсем темный и книг не читаю? :) Если человек понимает вещь - он может объяснить ее "на пальцах". Пусть это объяснение не исчерпывающее, но оно интересно и полезно (понятно "что главное"). А "посылать на гугл" ума много не надо, так на любой вопрос можно ответить (вернее - отпихнуться) :) Название: Re: Функция sleep() Отправлено: BRE от Август 29, 2011, 18:44 Ну если ты воспользуешься поиском, то скорее всего найдешь мое сообщение на форуме, где я на пальцах пытался рассказать про TSS и процесс переключения задач. ;)
Тогда у тебя эта тема не вызвала интереса, да? |