2009-02-25 3 views
1

Краткая вырезка короткой строки - this article сначала, а затем this article. Короче говоря, это старая проблема ASP.NET и случайное переключение между потоками. Ну, не так случайно. Как объясняет вторая статья, это происходит только «когда ваш поток выполняет операцию асинхронного ввода-вывода». Итак ... что это за асинхронная операция ввода-вывода в этом случае? Я знаком со стандартом Begin ... End ... IAsyncResult и модель события для асинхронного ввода-вывода. Но я не вижу, как это можно связать с переключателем потока.Что такое «операция async IO» в .NET?

Дело в том, что я просто боюсь любого «скрытого» асинхронного ввода-вывода, которое может выполнять мое программное обеспечение (и которое затем спровоцировало бы переключатель потоков). Но как их идентифицировать?

ответ

1

Операции Async IO относятся к ситуациям, в которых вызывающий поток не блокируется, чтобы ждать ввода-вывода. Примеры включают операции BeginXXX в потоках, сетевые подключения и т. Д.

При настройке вызова с использованием BeginXXX поток threadpool будет использоваться для выполнения вашего обратного вызова, когда драйвер устройства обычно обрабатывает фактический ввод-вывод. Таким образом, может быть задействовано несколько различных потоков.

+0

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

+0

Ну, цитата из Скотта Гу говорит, что «иногда» равно, когда ваш поток выполняет асинхронный ввод-вывод. Насколько я понимаю, Async IO по-прежнему равен IO-операциям, выполняемым файловым пулом. –

+0

Ну, на самом деле, некоторый асинхронный IO может выполняться самим ядром без каких-либо вложенных потоков (насколько я понимаю). Как чтение файла. Эта возможность также доступна в простой Win32 (и она рекомендуется как самая быстрая опция ввода-вывода). –