Valera Vino
Oferta, która wygrała- Zlecenia 5
- Ocena -
- Ranking 147
Budżet: 1000 UAH Termin: 1 dzień
Zrobię to za pośrednictwem dll.
W delfie nie znalazłem idealnego sposobu, więc w karpie zbieram dll i przez nią będziemy pracować.
Budżet: 1000 UAH Termin: 1 dzień
Funkcja CreateFileA
Drugi parametr dwDesireAccess - ustawiasz w
GENERIC_Przeczytaj
Trzeci - dwShareMode umieścić w 1
Zasada główna - wszystkie pozostałe odkrycia tego pliku (drugi przepływ lub procesy) nie powinny sprzeczne z pierwszym odkryciem w kwestii praw do udostępniania.
Synchronizacja czytania w razie potrzeby jest możliwa za pośrednictwem ewentu lub za pośrednictwem określonych flagi/ znaczeń w pamięci udostępnionej. Z jednego procesu nie ma problemu. I to jest cały algorytm. Szczegółowo - dwa pakiety czesteru i kawy. Będzie z schematami / blokami )
Oferty ukryte
Aktualnie brak ofert
-
Marya Yota 10 czerwca 2019По-моему это невозможно. Многопотоково один файл. Или я чего то не знаю )))
Только стрим ("на лету") качать данные и обрабатывать.
-
Yevgeny Sergeyevich
10 czerwca 2019
Мне необходимо многопоточно и синхронно дергать строки поочередно в каждый поток с смещением от начала и до конца файла.
-
Marya Yota 10 czerwca 2019Ну если только сплитить (разделит) файл на мильён файлов и тогда обрабатывать их в многопотоке.
-
Igor Lyalchenko 10 czerwca 2019Нет. Совместный доступ я описал в ставке. Собственно полагая что именно он вызвал проблему, т.к в содержимом файла, судя по ТЗ строки одинаковой длины и считать конкретную путем установки указателя на нужную ф-ей SetFilePointer не вызывает сложностей. Совместный доступ на чтение сам по себе прост. Правило которого следует придерживаться - первое открытие файла должно разрешать совместный доступ на чтение, а остальные открытия не противоречить друг другу в вопросах прав доступа. Например если вы открыли файл для чтения и записи, с произвольным доступом на чтение, а второй раз его пытаетесь открыть с разрешением произвольного доступа на чтение то это будет противоречить первому открытию, предусматривающему и запись тоже. Вот и вся тонкость
-
Marya Yota 10 czerwca 2019В том то и дело (как я уже писала), что строки неодинаковой длины.
Например:
заказ №3 13.04.2019
заказ №456 13.12.2199
Поэтому даже сплитить файл - это потеря, как минимум, одной "записи".
-
Igor Lyalchenko 10 czerwca 2019Ну а при неодинаковой длинне всегда полезно сперва составить карту строк. Массив смещений от начала. Иначе произвольный доступ к сотне байт, превратится в перечитывание 2гб
-
Igor Lyalchenko 10 czerwca 2019Ну а если не лабораторная (где выигрыш от многопоточности не в скорости чтения, а в скорости получения запроса), а чтение именно последовательное от начала и до конца.. то господа коллеги верно отметили - многопоточность сразу снизит скорость работы, так как после чтения одного блока, для чтения второго (того же самого фактически, ранее прочитанного) нужно будет дергать считывающие головки туда сюда и кроме жуткого рычания диска под нагрузкой не получите ничего интересного
-
Yevgeny C 10 czerwca 2019Такое "многопоточное" чтение бессмысленно, т.к. приведёт не к увеличению скорости чтения, а наоборот - к деградации, особенно если файл находится на жёстком диске.
-
Igor Lyalchenko 10 czerwca 2019А вот вопрос. Смотря какие цели. Чем ставить очередь на чтение к примеру не один-два запроса и с непредсказуемым доступом внутри файла, да ещё мелких объемов на чтение.. то скорость многопоточного варианта таки возрастет
-
Igor Lyalchenko 10 czerwca 2019Нет, безусловно, блины вращаться быстрее не станут от того что файл открыт 1000 раз. Это понятно ))
Вопрос для чего это дальше. Но технически это возможно и не сложно придумать ситуацию, когда это хоть и не вызовет большей скорости работы железа, но это железо поднапряжет и что то из него таки выдавит сверх однопоточного.
-
Yevgeny C 10 czerwca 2019Да нет, вы только проиграете по скорости, потому что скорость последовательного чтения как минимум на 2 порядка выше скорости случайного чтения. А при многопоточном чтении вы как раз и получите вариант случайного чтения данных с диск.
-
Igor Lyalchenko 10 czerwca 2019Если нужно последовательное (строго последовательное, напр речь о копировании файла) то да, безусловно правы.
Так же если после чтения блока минимум обработки и мы готовы читать след.блок молниеносно то тоже да, тоже правы.
Ну а если речь о необходимости произвольного чтения что в один что в несколько потоков ? Или вариант когда требуется доп обработка перед тем как можно читать дальше и пока мы обрабатываем hdd простаивает?
-
Vyacheslav Azarov 10 czerwca 2019Нужно оптимизировать обработку потока файла, в алгоритме о котором вы не сказали ни слова. Открытие нескольких дескриторов не увеличит скорость обработки информации, физический диск то один.
-
Igor Lyalchenko 10 czerwca 2019Ну и ещё может не быть алгоритма а может быть задача по какой нибудь лабораторной ))
В которой сказано - нужно многопоточно ))
-
Yevgeny C 10 czerwca 2019Выигрыш от многопоточности будет только при обработке файла, а не при его чтении. Чтобы получить максимальную скорость, читать нужно одним потоком последовательно, а обрабатывать считанные данные уже многопоточно.
-
Igor Lyalchenko 10 czerwca 2019согласен. почти всегда это возможно реализовать именно таким способом ))
я лишь говорю что многопоточно это тоже возможно, хоть и под сомнением целесообразность.
Aktualne zlecenia dla freelancerów w kategorii Aplikacje desktopowe
Dzień dobry Należy stworzyć moduł, który będzie działał z bazą danych Firebird w C++ do sprzedaży towarów. Są przykłady gotowych rozwiązań oraz opis funkcjonalności modułu. Główne funkcje: autoryzacja, wybór towaru na ekranie z grup/podgrup, przejście do koszyka, płatność kartą oraz druk paragonu. Program powinien działać na Windows 10 i wyżej, korzystać z istniejącej bazy danych.
Napisać i stworzyć aplikację mobilną. Potrzebne jest kreatywne i wysoko profesjonalne podejście, ponieważ pomysł aplikacji jest nietypowy)
Opracowanie aplikacji Power App, wsparcie mnie jako nowicjusza. Canvas App, pomoc w opracowaniu ekranu Pomoc w opracowaniu struktury danych dla aplikacji Programowanie funkcji Pomoc w tworzeniu tabel Date-verse