Статья:
Эффективная многопоточностьАвтор(ы): Алексей Ширшов
Дата: 03.08.2003
Статья посвящена системным механизмам, организующим (или помогающим организовать) пул потоков. Рассматриваются базовые, универсальные сервисы, с помощью которых можно реализовывать серверы для любых доступных механизмов взаимодействия сервера и клиента: сокеты, именованные каналы (named pipes), почтовые ящики (mailslots) и проч.
Авторы:
Алексей Ширшов
Аннотация:
Статья посвящена системным механизмам, организующим (или помогающим организовать) пул потоков. Рассматриваются базовые, универсальные сервисы, с помощью которых можно реализовывать серверы для любых доступных механизмов взаимодействия сервера и клиента: сокеты, именованные каналы (named pipes), почтовые ящики (mailslots) и проч.
Здравствуйте, Алексей Ширшов, Вы писали:
АШ>Статья:
АШ>Эффективная многопоточностьАвтор(ы): Алексей Ширшов
Дата: 03.08.2003
Статья посвящена системным механизмам, организующим (или помогающим организовать) пул потоков. Рассматриваются базовые, универсальные сервисы, с помощью которых можно реализовывать серверы для любых доступных механизмов взаимодействия сервера и клиента: сокеты, именованные каналы (named pipes), почтовые ящики (mailslots) и проч.
АШ>Авторы:
АШ> Алексей Ширшов
АШ>Аннотация:
АШ>Статья посвящена системным механизмам, организующим (или помогающим организовать) пул потоков. Рассматриваются базовые, универсальные сервисы, с помощью которых можно реализовывать серверы для любых доступных механизмов взаимодействия сервера и клиента: сокеты, именованные каналы (named pipes), почтовые ящики (mailslots) и проч.
Хочу только добавить одно замечание:
BOOL ChangeTimerQueueTimer(
HANDLE TimerQueue, // хендл очереди таймеров
HANDLE Timer, // хендл таймера
ULONG DueTime, // новое значение задержки перед вызовом
ULONG Period // новое значение периода вызова
);
Функция вопросов не вызывает, однако нужно отметить, что она не оказывает влияния на «одноразовые» (one-shot) таймеры, при создании которых в качестве периода был указан 0.
Эта функция действительно не работает с таймерами, период которых = 0. Но пока этот "единичный" таймер не отработал, она прекрасно меняет оба параметра:
BOOL bRet = CreateTimerQueueTimer(&hTimer, hQueue, (WAITORTIMERCALLBACK)TimerRoutine, NULL, 30000, 0, 0);
ChangeTimerQueueTimer(hQueue, hTimer, 10000, 0); // еще не прошло 30 секунд
ChangeTimerQueueTimer(hQueue, hTimer, 2000, 500); // еще не прошло даже 10 секунд.
И через 2 секунды, именно через 2, без учета времени которое прошло до вызова последнего ChangeTimerQueueTimer!
Т.е. счетик как бы заново запускается при вызове ChangeTimerQueueTimer вне зависимости от вида таймера, главное, чтобы он еще не отработал свое.
А так, статья замечательная.
Люди — ангелы презирающие условности, желающие восстановить друвнейшую связь со звездной динамомашиной в вечности мироздания
Здравствуйте, Алексей Ширшов, Вы писали:
АШ>Статья:
АШ>Эффективная многопоточностьАвтор(ы): Алексей Ширшов
Дата: 03.08.2003
Статья посвящена системным механизмам, организующим (или помогающим организовать) пул потоков. Рассматриваются базовые, универсальные сервисы, с помощью которых можно реализовывать серверы для любых доступных механизмов взаимодействия сервера и клиента: сокеты, именованные каналы (named pipes), почтовые ящики (mailslots) и проч.
АШ>Авторы:
АШ> Алексей Ширшов
АШ>Аннотация:
АШ>Статья посвящена системным механизмам, организующим (или помогающим организовать) пул потоков. Рассматриваются базовые, универсальные сервисы, с помощью которых можно реализовывать серверы для любых доступных механизмов взаимодействия сервера и клиента: сокеты, именованные каналы (named pipes), почтовые ящики (mailslots) и проч.
Поздновато ,конечно,но замечу неточности по поводу упоминания Рихтера
Во-первых про BindIoCompletionCallback он пишет , что "Вы должны передавать 0 в параметре dwFlags"
Во-вторых "the number of concurrently runnable threads is !limited! to 2 times the number of CPUs"
В остальное пока не вникал.
Кстати возникла проблема в visual 2005 Студия видит прототип BindIoCompletionCallback а компилятор утверждает что
'BindIoCompletionCallback': identifier not found
Здравствуйте, Алексей Ширшов, Вы писали:
АШ>Статья:
АШ>Эффективная многопоточностьАвтор(ы): Алексей Ширшов
Дата: 03.08.2003
Статья посвящена системным механизмам, организующим (или помогающим организовать) пул потоков. Рассматриваются базовые, универсальные сервисы, с помощью которых можно реализовывать серверы для любых доступных механизмов взаимодействия сервера и клиента: сокеты, именованные каналы (named pipes), почтовые ящики (mailslots) и проч.
К списку функций, которые могут быть использованы с портом завкршения, можно добавить следующие "сокетные"
AcceptEx
DisconnectEx
TransmitFile
WSASend
WSARecv
Скорее всего есть и другие, те же WSARecvFrom и WSASendTo, просто перечисленные я реально использовал с портом завершения.