Есть ли разница между использованием функций WindowsAPI Sleep() и WaitForSingleObject() в плане эффективности предоставления оставшейся части кванта времени другим потокам?
Предположим, мы хотим приостановить текущий поток на малый промежуток времени (например, 50-100 мс), и, как перфекционисты, желаем, чтобы другим потокам досталась максимально возможная часть этого процессорного времени, включая остаток текущего кванта (минимизировать накладные расходы, присущие реализации).
Точность реализации временной задержки не имеет значения
Вариант 1: Sleep(xx)
Вариант 2: WaitForSingleObject(h,..,..,xx) — в качестве хендла указываем хэндл самого потока, соответственно выход по таймауту
Дед Нечипор, если поток ждет (ничего не делает), то, наверное, у него в любом случае будет низкий приоритет. Тут, скорее, вопрос в дизайне: если поток не ждет определенного события, то чего он, собственно, ждет? Может, когда истечет таймер будет не лучший момент для исполнения с точки зрения загруженности процессора. Может, лучше изначально исполняться с заведомо низким приоритетом или подождать пока более важные «разрешат»?
Value, тут ситуация такая: есть потоки-поставщики маркет-данных и потоки-потребители. Соединены lockless очередями. И у тех, и у других предполагается наличие постоянной работы по определению, поэтому вклинивать в процесс отправки данных сигнализацию с помощью TEvent считаю неоправданной в моем случае, т.к. добавляются накладные расходы на синхронизацию.
Предполагаю, что время «простоя» (промежуток времени, когда очередь пустая или промежутки между доставкой датафидом данных потоку-поставщику для постановки в очередь) можно ожидать слишком малой величиной и сами простои не таким уж и частым событием, чтобы проектировать это взаимодействие на событийной модели через объекты синхронизации.
Решил пойти таким путем — если вдруг так уж случилось, что выдался момент затишья у потока, то нечего впустую молотить процессорное время и дать потоку заснуть на малый квант времени (50-100 мс), эдакая подсказка планировщику, что можно подкормить временем другие потоки, может кому нужнее. С миру по нитке — гляди, и еще на один поток-робот время наскребется на бюджетном процессоре. А пакет датафида, который накопится за это время, будет обработан позже — задержка-то некритична.
bstone, а пониженный приоритет у потока остается после возврата из спячки, или возвращается к обычному состоянию, предшествующему засыпанию? Т.е. если все потоки имели равный приоритет, останется ли это так же после того, как один из них (или каждый в свое время) вызовет и вернется из Sleep()?
Дед Нечипор, Sleep() понижает приоритет потока до базового и так его и оставляет. Т.е. если менялся динамический приоритет потока для priority boost, то его после спячки надо будет опять поднимать по необходимости.
Это все не работает на малоядерных процессорах под виндовс, типичный слип будет 2-6 миллисекунд при переключении контекста процесса. На него и можно закладываться.
Книга заявок на дебютный выпуск российских сукук будет открыта 29 мая
❗Уже через неделю, 29 мая , будет открыта книга заявок на дебютный выпуск российских сукук , ценных бумаг структурированных по принципам партнерского финансирования. Эмитентом выпуска выступает...
Алексей Девятов Рынок часто движется импульсами, и тем важнее оценивать активы без спешки, не отвлекаясь на инфошум. Для этого отлично подходят выходные дни. В конце недели разбираем самые...
Две новых инвест идеи на иксы у Элвиса в ПИФ Alenka Capital: подсвечиваем, пока горит
Продолжаем серию ежемесячных постов с отслеживанием покупок/продаж профессиональными управляющими. Особенно теми, кто управляет МИЛЛИАРДАМИ рублей в акциях. Зачем? Посмотреть, как думают профи —...
Noname_final_copy_34,
Арендопригодная где то 75% от общей, и что? Я взял стоимость квадрата по 350 тыр это ближе к низшей границе рыночной стоимости.
Что касается залогов, то например б...
Чингачгук (Великий Змей), травили народ со всех сторон
На территории России остановили реализацию ряда вин и коньяков армянского производства из-за их несоответствия обязательным стандартам ка...
Анатолий Селянин, за Кавказ взялись конкретновот это умора… дать компании поработать — тоже шедевр. Компания — не футбольная команда, которая сыграться должна, а мы — не болельщики
Денис Хиневич, доброе утро! Подожди немного и по 5 купишь. Меня удивляет чем руководствуются опытный космонавт когда лезет в этот извеняюсь шатл… провести осво это ещё то предприятие. Где профсоюз ...
ЮГК Новым владельцем национализированного золотодобытчика «Южуралзолото» (ЮГК) с высокой долей вероятности станут структуры, близкие к Сулейману Керимову.
Основатель ЮГК Константин Струков оконча...
Рынок американского госдолга подает все больше тревожных сигналов Рынок американского госдолга подает все больше тревожных сигналов: инвесторы ускоренно выходят из 10-летних U.S. Treasuries, а доходно...
⚡Шляпа встрял в Аэрофлоте
Он ранее покупал аэрлфлот на 160 млн и теперь в шоке от новостей, что государство свой пакет продает.
Подписчикам обещает большие дивы аэрофлота в надежде, что он...
Предположим, мы хотим приостановить текущий поток на малый промежуток времени (например, 50-100 мс), и, как перфекционисты, желаем, чтобы другим потокам досталась максимально возможная часть этого процессорного времени, включая остаток текущего кванта (минимизировать накладные расходы, присущие реализации).
Точность реализации временной задержки не имеет значения
Вариант 1: Sleep(xx)
Вариант 2: WaitForSingleObject(h,..,..,xx) — в качестве хендла указываем хэндл самого потока, соответственно выход по таймауту
Предполагаю, что время «простоя» (промежуток времени, когда очередь пустая или промежутки между доставкой датафидом данных потоку-поставщику для постановки в очередь) можно ожидать слишком малой величиной и сами простои не таким уж и частым событием, чтобы проектировать это взаимодействие на событийной модели через объекты синхронизации.
Решил пойти таким путем — если вдруг так уж случилось, что выдался момент затишья у потока, то нечего впустую молотить процессорное время и дать потоку заснуть на малый квант времени (50-100 мс), эдакая подсказка планировщику, что можно подкормить временем другие потоки, может кому нужнее. С миру по нитке — гляди, и еще на один поток-робот время наскребется на бюджетном процессоре. А пакет датафида, который накопится за это время, будет обработан позже — задержка-то некритична.