Внутренне ли CLR порождает поток для ответа на события таймера? - PullRequest
1 голос
/ 14 июня 2011

У нас с Хансом недавно была небольшая дискуссия на эту тему, и мне любопытно, как она на самом деле реализована.

См. Первоначальный разговор в комментариях здесь: Являются ли таймеры c # естественными многопоточными?

Ответы [ 2 ]

2 голосов
/ 16 июня 2011

Ну, я провел некоторые исследования ... Подробности в моем сообщении в блоге

Короче говоря, просто краткое изложение оттуда:

  • Что касаетсяSSCLI20 Ганс был абсолютно прав.Там действительно отдельный поток для передачи БТР и таймеров в очереди.Спасибо за вашу настойчивость, кстати.Я получил шанс выкопать что-нибудь интересное:)
  • В более новых системах это все еще можно было реализовать без дополнительных потоков.Я просто ошибочно предположил, что это было уже там, когда была написана CLR 2.0.Для получения дополнительной информации см. CreateThreadpoolTimer, SetThreadpoolTimer и CloseThreadpoolTimer.
2 голосов
/ 16 июня 2011

Смотря на эталонный источник .Net 4.0, System.Timers.Timer, кажется, использует System.Threading.Timer для обработки фактических деталей реализации.Последний генерирует таймеры, вызывая AddTimerNative.AddTimerNative является внутренним вызовом.

Поиск в Google AddTimerNative приводит к множеству интересных результатов, включая комментарий Вилли Денойетта , где он утверждает, что он вызывает CreateTimerQueueTimer .

На этой странице указано, что «функции обратного вызова поставлены в очередь в пуле потоков».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...