Pthread - Что является различием между time.h:: сон () и pthread.h:: pthread_yield ()?

Существует необязательная перегрузка для DataBinder.Eval для предоставления форматирования:

<%# DataBinder.Eval(Container.DataItem, "expression"[, "format"]) %>

Параметр формата представляет собой строковое значение, использующее синтаксис замены заполнителя значения (называемый составным форматированием), например:

<asp:Label id="lblNewsDate" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "publishedDate", "{0:dddd d MMMM}") %>'</label>
14
задан Trevor Boyd Smith 1 June 2009 в 22:38
поделиться

3 ответа

От pthread_yield :

Подпрограмма pthread_yield заставляет вызывающий поток отказаться от использования своего процессора и ждать в очереди выполнения перед повторным планированием. Если очередь выполнения пуста при вызове подпрограммы pthread_yield, вызывающий поток немедленно перепланировывается.

Из справочной страницы сна :

sleep () переводит вызывающий процесс в спящий режим, пока не пройдут секунды секунды. или поступает сигнал, который не игнорируется.

Если вы не хотите, чтобы ваши потоки имели реальную временную задержку, а просто хотите, чтобы другие потоки выполняли свою работу, то pthread_yield лучше подходит, чем сон.

15
ответ дан 1 December 2019 в 09:02
поделиться

sleep () заставляет вашу программу прекращать выполнение на определенный промежуток времени. Независимо от того, что еще происходит в системе, ваш поток не будет запускаться снова, пока не истечет, по крайней мере, время, прошедшее для sleep (). pthread_yield () уведомляет операционную систему о том, что ваш поток завершен и может переключить выполнение на другой поток. Однако, если нет потока с более высоким приоритетом, который должен выполнять работу в это время, ваш поток может немедленно запуститься снова.

IOWs, после sleep () ваш поток гарантированно прекратит работу, даже если больше никому не нужно запускать , в то время как pthread_yield () - это просто вежливый способ дать другим потокам возможность запускаться, если они в этом нуждаются.

Обновление в ответ на обновление вопроса: и sleep (), и pthread_yield () влияют только на вызывающий поток.

14
ответ дан 1 December 2019 в 09:02
поделиться

sleep (s) берет текущий поток выполнения и приостанавливает его до тех пор, пока не пройдет s секунд (или он не будет разбужен сигналом.)

В более практических терминах, когда вы вызываете sleep (), этот поток прекращает выполнение и просто ... ждет, пока не пройдет указанное время. После прохождения этот поток помещается в очередь готовности.

pthread_yield () говорит: «Возьмите этот поток и поместите его в очередь готовности». Ваш поток прекратит выполнение и будет в состоянии ожидания, чтобы его выбрал / запустил планировщик. Это не гарантирует, что ваш поток не возобновит работу немедленно. Но это дает другому потоку возможность работать в определенный момент его выполнения.

1
ответ дан 1 December 2019 в 09:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: