Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Как организовать асинхронное чтение данных?
|
|||
|---|---|---|---|
|
#18+
Классика нам предлагает последовательно выполнить два действия: 1. Считывать порцию данных (строку для текстовых файлов или блок для бинарных файлов). 2 Обработать данные. А как просто выполнить параллельную эти два действия: пока я обрабатываю первую порцию данных происходит считывание второй порции, пока обрабатываю вторую порцию данных происходит считывание третьей... Есть какие- то простые способы асинхронной работы с I/O в С++? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2018, 12:52 |
|
||
|
Как организовать асинхронное чтение данных?
|
|||
|---|---|---|---|
|
#18+
AlekseySQLКлассика нам предлагает последовательно выполнить два действия: 1. Считывать порцию данных (строку для текстовых файлов или блок для бинарных файлов). 2 Обработать данные. А как просто выполнить параллельную эти два действия: пока я обрабатываю первую порцию данных происходит считывание второй порции, пока обрабатываю вторую порцию данных происходит считывание третьей... Есть какие- то простые способы асинхронной работы с I/O в С++? В С++ наверное нет. Это в операционной системе или архитектуре приложения. Есть 2 варианта. 1. Использовать соотвествующие системные вызовы и обработку сообщений от ОС. 2. Написать собственный поток для асихронного ввода вывода, который должен обмениваться сообщениями с основным потоком обработки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2018, 15:02 |
|
||
|
Как организовать асинхронное чтение данных?
|
|||
|---|---|---|---|
|
#18+
Средствами С++: один поток читает блоками, ставит блоки в очередь, второй поток берет из очереди и обрабатывает. Можно средствами ОС. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2018, 17:05 |
|
||
|
Как организовать асинхронное чтение данных?
|
|||
|---|---|---|---|
|
#18+
Надо только понимать, что "просто" - не всегда "быстро" ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2018, 17:14 |
|
||
|
Как организовать асинхронное чтение данных?
|
|||
|---|---|---|---|
|
#18+
Dima TСредствами С++: один поток читает блоками, ставит блоки в очередь, второй поток берет из очереди и обрабатывает. Можно средствами ОС. Вот этого предложения я и боялся :) Даже слово "просто" использовал :) Тогда надо огород с потоками городить (которые у меня заняты под обработку данных, а переключение контекста- очень плохое решение). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2018, 17:17 |
|
||
|
Как организовать асинхронное чтение данных?
|
|||
|---|---|---|---|
|
#18+
д0кХ1. Использовать соотвествующие системные вызовы и обработку сообщений от ОС. Если это платформозависимые решения, то может Qt что-то может предложить? Эти ребята тем и занимаются, что под один интерфейс собирают реализации разных платформ и делают на них риколы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2018, 17:20 |
|
||
|
Как организовать асинхронное чтение данных?
|
|||
|---|---|---|---|
|
#18+
AlekseySQLЕсли это платформозависимые решения, то может Qt что-то может предложить? fread() и std::mutex() для организации queue - вполне кроссплатформенны. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2018, 17:51 |
|
||
|
Как организовать асинхронное чтение данных?
|
|||
|---|---|---|---|
|
#18+
Что- то мне подумалось, что Qt- овский map выполняет то, что мне нужно. По логике он считывает данные по одной странице (4 кб), а потом частями отдает их. Так что наверное решение нашлось :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2018, 18:14 |
|
||
|
Как организовать асинхронное чтение данных?
|
|||
|---|---|---|---|
|
#18+
AlekseySQLDima TСредствами С++: один поток читает блоками, ставит блоки в очередь, второй поток берет из очереди и обрабатывает. Можно средствами ОС. Вот этого предложения я и боялся :) Даже слово "просто" использовал :) Тогда надо огород с потоками городить (которые у меня заняты под обработку данных, а переключение контекста- очень плохое решение). Собственно это ОС и сделает если средства ОС задействуешь. Переключение контекста ты неправильно понимаешь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2018, 19:56 |
|
||
|
Как организовать асинхронное чтение данных?
|
|||
|---|---|---|---|
|
#18+
AlekseySQLЧто- то мне подумалось, что Qt- овский map выполняет то, что мне нужно. По логике он считывает данные по одной странице (4 кб), а потом частями отдает их. Так что наверное решение нашлось :) Да, это описанная тобой классика, это последовательная обработка: обратился к новой странице - пауза на считывание этой страницы с диска, т.е. как ты написал AlekseySQL1. Считывать порцию данных (строку для текстовых файлов или блок для бинарных файлов). 2 Обработать данные. Проецирование в память не приводит к считыванию с диска всего что проецируешь. Читается по мере необходимости. Если хочешь опережающее чтение, то в средствах ОС есть спец.флаги при открытии файла, которые указывают что чтение будет всего файла и последовательно. В этих случаях ОС делает упреждающее чтение, т.е. ты прочитал кусок файла, пока обрабатываешь - ОС прочитала в кэш следующий кусок, когда ты его попросишь - ОС просто скопирует его к тебе из кэша. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2018, 20:02 |
|
||
|
Как организовать асинхронное чтение данных?
|
|||
|---|---|---|---|
|
#18+
Можно сравнить сколько код для синхронного чтения и обработки файла (если не определено ASYNCIO), и для асинхронного (если определено ASYNCIO): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2018, 03:10 |
|
||
|
Как организовать асинхронное чтение данных?
|
|||
|---|---|---|---|
|
#18+
AlekseySQLКлассика нам предлагает последовательно выполнить два действия: 1. Считывать порцию данных (строку для текстовых файлов или блок для бинарных файлов). 2 Обработать данные. А как просто выполнить параллельную эти два действия: пока я обрабатываю первую порцию данных происходит считывание второй порции, пока обрабатываю вторую порцию данных происходит считывание третьей... Есть какие- то простые способы асинхронной работы с I/O в С++? на винде I/O Completion Ports , вроде несложно, хотя это понятие относительное кросс-платформенно - asio например, но тоже не без телодвижений ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2018, 22:41 |
|
||
|
Как организовать асинхронное чтение данных?
|
|||
|---|---|---|---|
|
#18+
Оказалось, что ничего этого не нужно: система работает через буферы, которые и берут на себя задачу непрерывной подачи данных. Я сделал замеры когда на моем SSD были ФС ext4 и ntfs. В последнем случае сильно упала скорость чтения файла, но общая скорость работы программы практически сохранилась (привожу средние значения): Чтение ext4: 22,5 сек Чтение ntfs: 38 сек Чтение + Выполнение ext4: 65 сек Чтение + Выполнение ntfs: 66,5 сек По результатам видно, что падение скорости выполнения всей программы значительно меньше, чем падение скорости чисто файлового чтения. Так что отбой: умные дяденьки этот вопрос уже обдумали и дали нам готовое решение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2018, 15:53 |
|
||
|
Как организовать асинхронное чтение данных?
|
|||
|---|---|---|---|
|
#18+
AlekseySQL, системные буферы не безразмерны. Используй перекрытый ввод-вывод . Если надеешься на буферизацию при записи, то, как минимум, во время обработки очередного блока можешь запросить чтение следующего блока. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2018, 16:08 |
|
||
|
Как организовать асинхронное чтение данных?
|
|||
|---|---|---|---|
|
#18+
чччДкак минимум, во время обработки очередного блока можешь запросить чтение следующего блока. Это делает контроллер диска без каких- либо дополнительных телодвижений исполняемой программы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2018, 20:07 |
|
||
|
Как организовать асинхронное чтение данных?
|
|||
|---|---|---|---|
|
#18+
AlekseySQLчччДкак минимум, во время обработки очередного блока можешь запросить чтение следующего блока. Это делает контроллер диска без каких- либо дополнительных телодвижений исполняемой программы. AlekseySQLЯ сделал замеры когда на моем SSD а чем отличается SSD от HDD помнишь или уже забыл? и как работает HDD в конкурентной среде тоже помнишь? двухфазный буфер это как бы основа, ты предупреждаешь ОС о том что тебе понадобятся ещё данные и она может планировать хотелки от всех программ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2018, 22:41 |
|
||
|
Как организовать асинхронное чтение данных?
|
|||
|---|---|---|---|
|
#18+
AlekseySQLЯ сделал замеры когда на моем SSD были ФС ext4 и ntfs. В последнем случае сильно упала скорость чтения файла Ожидаемо. Линукс не заточен под ФС виндовса. AlekseySQLчччДкак минимум, во время обработки очередного блока можешь запросить чтение следующего блока. Это делает контроллер диска без каких- либо дополнительных телодвижений исполняемой программы. Наивное заблуждение. Контроллер не знает где следующий блок. ОС знает, но тоже не торопится читать следующий, т.к. файлы редко читаются последовательно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2018, 18:50 |
|
||
|
Как организовать асинхронное чтение данных?
|
|||
|---|---|---|---|
|
#18+
Dima TНаивное заблуждение. Контроллер не знает где следующий блок. ОС знает, но тоже не торопится читать следующий, т.к. файлы редко читаются последовательно. Думаю, что следующий блок идет сразу за текущим:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2018, 19:18 |
|
||
|
Как организовать асинхронное чтение данных?
|
|||
|---|---|---|---|
|
#18+
Dima T т.к. файлы редко читаются последовательно. Сейчас достаточно крупные жесткие диски, поэтому практически нет фрагментации файлов, поэтому в основном файлы читаются последовательно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2018, 19:20 |
|
||
|
Как организовать асинхронное чтение данных?
|
|||
|---|---|---|---|
|
#18+
На SSD фрагментация никак не мешает. С SSD можно одинаково быстро прочитать сектор из любого места диска. Дефрагментация нужна была на HDD, т.к. там последовательно читать быстрее, поэтому исторически ФС заточены на последовательную запись. Отчасти ты прав: ОС старается писать файл последовательно, но нынче это уже не нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2018, 20:02 |
|
||
|
Как организовать асинхронное чтение данных?
|
|||
|---|---|---|---|
|
#18+
AlekseySQLDima T т.к. файлы редко читаются последовательно. Сейчас достаточно крупные жесткие диски, поэтому практически нет фрагментации файлов, поэтому в основном файлы читаются последовательно. Я хотел сказать что редко требуется прочитать файл от начала до конца. Гораздо чаше нужно чтение кусков из разных мест. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2018, 20:09 |
|
||
|
Как организовать асинхронное чтение данных?
|
|||
|---|---|---|---|
|
#18+
AlekseySQLчччДкак минимум, во время обработки очередного блока можешь запросить чтение следующего блока. Это делает контроллер диска без каких- либо дополнительных телодвижений исполняемой программы. Ты сам так решил или прочитал где-нибудь? Может, тестировал, сравнивал с перекрытым вводом-выводом? Расскажи, пожалуйста. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2018, 20:24 |
|
||
|
Как организовать асинхронное чтение данных?
|
|||
|---|---|---|---|
|
#18+
Dima TНа SSD фрагментация никак не мешает. С SSD можно одинаково быстро прочитать сектор из любого места диска. Не соглашусь: есть программы показывающие скорость записи / чтения для дисков (например, CristalDiskMark). Так вот на SSD для непрерывных потоков они показывают значительно лучшие результаты, чем на операциях чтениях / записи кусками по 4, 8, 16... кБ. Так что непрерывность расположения данных SSD также важна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2018, 20:40 |
|
||
|
Как организовать асинхронное чтение данных?
|
|||
|---|---|---|---|
|
#18+
чччДТы сам так решил или прочитал где-нибудь? Может, тестировал, сравнивал с перекрытым вводом-выводом? Расскажи, пожалуйста. Читал об этом много раз. Собственно если бы этой функции не было, то кеш HDD- диску был бы не нужен. Насчет тестов: для этого можно использовать программы типа CrystalDiskMark, которые показывают хорошие результаты для непрерывных операций именно за счет дополнительных асинхронных действий, выполняемых контроллером диска (опережающее чтение и "объединенная" запись). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2018, 20:46 |
|
||
|
Как организовать асинхронное чтение данных?
|
|||
|---|---|---|---|
|
#18+
Можно взять HD-Tune и погонять бенчмарки на SSD диске и раз и навсегда в данном топике поставить точку в этом вопросе. Стоимость IOps-а у него другая. Но это еще не дает нам основания говорить что SSD всегда будет хорош на произвольном доступе. Возможно у него есть другие артефакты которые также имеют значение. Ну. Кто счастливый обладатель SSD? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2018, 21:49 |
|
||
|
|

start [/forum/topic.php?fid=57&fpage=22&tid=2017985]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
39ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
| others: | 292ms |
| total: | 431ms |

| 0 / 0 |
