Как понять асинхронный ввод в Windows? - PullRequest
1 голос
/ 17 апреля 2009

1.Как понять асинхронный ввод в Windows ??

2. Если я что-то записываю / читаю в файл с помощью асинхронного ввода-вывода:

WriteFile();
ReadFile();
WriteFile();

Сколько потоков генерирует ОС для выполнения этой задачи?

Выполнить ли задачу 3 одновременно и многопоточно или бегать один за другим просто в другом порядке?

3.Могу ли я использовать многопоточность и в каждом потоке использовать асинхронный ввод-вывод читать или писать один и тот же файл?

Ответы [ 5 ]

2 голосов
/ 17 апреля 2009

1.Как понять асинхронный ввод в Windows ??

Прочитайте документацию Win32. Поиск в сети. Не ожидайте ответа на такой большой и широкий вопрос здесь, в SO.

2. Если я что-то записываю / читаю в файл с помощью асинхронного ввода-вывода:

WriteFile (); ReadFile (); WriteFile ();

Сколько потоков генерирует ОС для выполнения этой задачи?

Не думаю, что это так. Он будет повторно использовать существующие контексты потока для выполнения вызовов функций ядра. По сути, ОС планирует работу и заимствует поток, чтобы выполнить ее - это нормально, поскольку контекст ядра всегда одинаков.

3.Могу ли я использовать многопоточность и в каждом потоке использовать асинхронный ввод / вывод для чтения или записи тот же файл 101

Я верю, да. Я не знаю, что порядок выполнения гарантированно совпадает с порядком отправки, и в этом случае вы получите непредсказуемые результаты, если вы выполняете одновременное чтение / запись в тех же диапазонах байтов.

0 голосов
/ 17 апреля 2009

Предлагаю поискать книги Джеффри Рихтера по программированию на Win32. Это очень хорошо написанные руководства для подобных вещей. Я думаю, что у него есть более новая книга (ы?) По C #, так что следите, чтобы вы не купили не ту книгу.

0 голосов
/ 17 апреля 2009

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

Если вы работаете над каким-то странным асинхронным вводом-выводом, переформатируйте ваш вопрос.

0 голосов
/ 17 апреля 2009

На ваши вопросы:

Сколько потоков генерирует ОС выполнить эти задачи?

Зависит от того, используете ли вы пулы Windows, IOCP и т. Д. Как правило, вы решаете.

Выполнить ли задачу 3 одновременно и в многопоточном режиме или запустить один за другим просто с другим заказ?

Это зависит от вашей архитектуры. На одноядерном компьютере 3 задачи будут выполняться одна за другой, и порядок будет решен. На многоядерных машинах они могут работать вместе, в зависимости от того, как ОС запланировала потоки.

3.Могу ли я использовать многопоточность и в каждом потоке использовать асинхронный ввод-вывод для чтения или напишите тот же файл 101

Это насколько я знаю, поэтому кто-то другой должен ответить на этот вопрос.

Я предлагаю получить копию Windows через C / C ++ , поскольку в ней есть очень большая глава об асинхронном вводе-выводе.

0 голосов
/ 17 апреля 2009

Я думаю, это зависит от того, какую операционную систему вы используете. Но вам все равно не нужно беспокоиться об этом, это прозрачно и не должно влиять на то, как вы пишете свой код.

...