powered by simpleCommunicator - 2.0.37     © 2025 Programmizd 02
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Почему поток не хочет уничтожаться, постоянно крутиться в процедуре TThread.WaitFor
23 сообщений из 48, страница 2 из 2
Почему поток не хочет уничтожаться, постоянно крутиться в процедуре TThread.WaitFor
    #40093828
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSer
о чём речь?
об организации взаимодействия с внешним миром, слишком затратно по объёму рутинного кода выходит.
...
Рейтинг: 0 / 0
Почему поток не хочет уничтожаться, постоянно крутиться в процедуре TThread.WaitFor
    #40093832
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSerБлагодаря async / await обмен по сети, обмен с устройством, запросы к БД, работа
с файлами перебираются в главный поток и не парят программисту мозги
многопоточностью.

GetCurrentThreadId это подтверждает?

Технически не существует способа "перебраться в главный поток" бесконечному
циклу или ожиданию прихода ответа от сервера без того чтобы этот главный поток
не поставить колом.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Почему поток не хочет уничтожаться, постоянно крутиться в процедуре TThread.WaitFor
    #40093834
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
GetCurrentThreadId это подтверждает?

Технически не существует способа "перебраться в главный поток" бесконечному
циклу или ожиданию прихода ответа от сервера без того чтобы этот главный поток
не поставить колом.
технически существует, уже давно кстати, ещё с доса - раньше её кооперативная многозадачность называли
...
Рейтинг: 0 / 0
Почему поток не хочет уничтожаться, постоянно крутиться в процедуре TThread.WaitFor
    #40093837
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)раньше её кооперативная многозадачность называли

Ну да, ну да.
"Как бесконечным циклом не повесить всю систему? - Не пишите бесконечных циклов!"
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Почему поток не хочет уничтожаться, постоянно крутиться в процедуре TThread.WaitFor
    #40093839
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

DmSerБлагодаря async / await обмен по сети, обмен с устройством, запросы к БД, работа
с файлами перебираются в главный поток и не парят программисту мозги
многопоточностью.

GetCurrentThreadId это подтверждает?

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


если бесконечный цикл не занимается майнингом, то возникают моменты, когда можно всунуть вызов await XXX, который запустит начало асинхронной операции, далее прервёт работу этого цикла и отыщет, чем бы ещё полезным можно было бы заняться основному потоку. Естественно, Sleep и WaitFor в таких циклах недопустимы!
...
Рейтинг: 0 / 0
Почему поток не хочет уничтожаться, постоянно крутиться в процедуре TThread.WaitFor
    #40093840
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
- Не пишите бесконечных циклов!"
собственно так и есть, в шарпе все базовые либы переписали под такую идею
...
Рейтинг: 0 / 0
Почему поток не хочет уничтожаться, постоянно крутиться в процедуре TThread.WaitFor
    #40093842
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSerЕстественно, Sleep и WaitFor в таких циклах недопустимы!

Угу, так же как TQuery.Open или epoll_wait. И в чём смысл тогда?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Почему поток не хочет уничтожаться, постоянно крутиться в процедуре TThread.WaitFor
    #40093843
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)
DmSer
о чём речь?
об организации взаимодействия с внешним миром, слишком затратно по объёму рутинного кода выходит.


Для каждой функции, в которой есть вызов await, автоматически создаётся класс, в котором хранится состояние выполняемой операции. Это затратно по сравнению с классической машиной состояний. Но гораздо эффективнее по сравнению с многопоточным подходом.
...
Рейтинг: 0 / 0
Почему поток не хочет уничтожаться, постоянно крутиться в процедуре TThread.WaitFor
    #40093844
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

DmSerЕстественно, Sleep и WaitFor в таких циклах недопустимы!

Угу, так же как TQuery.Open или epoll_wait. И в чём смысл тогда?..

[/quot]

Смысл в том, что когда вводят поддержку async/await, то для всего предлагают асинхронные аналоги, например, TQuery.OpenAsync, epoll_waitAsync. Иначе смысла нет никакого.
...
Рейтинг: 0 / 0
Почему поток не хочет уничтожаться, постоянно крутиться в процедуре TThread.WaitFor
    #40093846
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSerдля всего предлагают асинхронные аналоги

Не для всего оно бывает в природе. Лисковый I/O - да, сетевой - только под
Windows да и то весьма ограниченно.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Почему поток не хочет уничтожаться, постоянно крутиться в процедуре TThread.WaitFor
    #40093849
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

DmSerдля всего предлагают асинхронные аналоги

Не для всего оно бывает в природе. Лисковый I/O - да, сетевой - только под
Windows да и то весьма ограниченно.


Сетевой обмен где угодно уже давно есть в асинхронном варианте. .NET, Kotlin, Rust, Go, Python, NodeJS этом активно пользуются, и далеко не только в винде.
...
Рейтинг: 0 / 0
Почему поток не хочет уничтожаться, постоянно крутиться в процедуре TThread.WaitFor
    #40093850
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иллюзия, жалкая иллюзия. Бесконечный цикл опроса текущего состояния с
ProcessMessagesasync внутри. Прогрев атмосферы.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Почему поток не хочет уничтожаться, постоянно крутиться в процедуре TThread.WaitFor
    #40093851
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

Иллюзия, жалкая иллюзия. Бесконечный цикл опроса текущего состояния с
ProcessMessagesasync внутри. Прогрев атмосферы.


Я не надеюсь, что в Дельфи это когда-либо появится. Скорее всего никогда не появится.
Можно не переживать.
...
Рейтинг: 0 / 0
Почему поток не хочет уничтожаться, постоянно крутиться в процедуре TThread.WaitFor
    #40093854
s62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
DmSerБлагодаря async / await обмен по сети, обмен с устройством, запросы к БД, работа
с файлами перебираются в главный поток и не парят программисту мозги
многопоточностью.

GetCurrentThreadId это подтверждает?

Технически не существует способа "перебраться в главный поток" бесконечному
циклу или ожиданию прихода ответа от сервера без того чтобы этот главный поток
не поставить колом.Async с Callback функцией. Во всяких процессорах типа Arduino этому соответствует работа по прерываниям.
...
Рейтинг: 0 / 0
Почему поток не хочет уничтожаться, постоянно крутиться в процедуре TThread.WaitFor
    #40093856
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSerЯ не надеюсь, что в Дельфи это когда-либо появится.

О чём ты? В Delphi функция async называется ProcessMessages и есть от рождения.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Почему поток не хочет уничтожаться, постоянно крутиться в процедуре TThread.WaitFor
    #40093857
s62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSer
Dimitry Sibiryakov

Иллюзия, жалкая иллюзия. Бесконечный цикл опроса текущего состояния с
ProcessMessagesasync внутри. Прогрев атмосферы.


Я не надеюсь, что в Дельфи это когда-либо появится. Скорее всего никогда не появится.
Можно не переживать.
Так вроде есть уже, библиотека Asynchronous Programming Library
https://docwiki.embarcadero.com/RADStudio/Sydney/en/Using_the_Asynchronous_Programming_Library
...
Рейтинг: 0 / 0
Почему поток не хочет уничтожаться, постоянно крутиться в процедуре TThread.WaitFor
    #40093861
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
s62
DmSer
пропущено...


Я не надеюсь, что в Дельфи это когда-либо появится. Скорее всего никогда не появится.
Можно не переживать.
Так вроде есть уже, библиотека Asynchronous Programming Library
https://docwiki.embarcadero.com/RADStudio/Sydney/en/Using_the_Asynchronous_Programming_Library


Не сопоставимо с теми преимуществами, которые даёт async/await в других языках. Тут пул потоков с его ограничениями, а там все в одном потоке.
...
Рейтинг: 0 / 0
Почему поток не хочет уничтожаться, постоянно крутиться в процедуре TThread.WaitFor
    #40093863
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

DmSerЯ не надеюсь, что в Дельфи это когда-либо появится.

О чём ты? В Delphi функция async называется ProcessMessages и есть от рождения.


Вот-вот! Одна Async-функция в Delphi уже есть. Осталось ещё миллион завезти для полноценности :)
...
Рейтинг: 0 / 0
Почему поток не хочет уничтожаться, постоянно крутиться в процедуре TThread.WaitFor
    #40093867
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSerОсталось ещё миллион завезти для полноценности :)

Нет, осталось её вызов напихать в каждую сторую строку каждой первой функции.
Хотя постой-ка, местные хомячки именно так и делают.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Почему поток не хочет уничтожаться, постоянно крутиться в процедуре TThread.WaitFor
    #40093874
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

DmSerОсталось ещё миллион завезти для полноценности :)

Нет, осталось её вызов напихать в каждую сторую строку каждой первой функции.
Хотя постой-ка, местные хомячки именно так и делают.


Нет, выборка из очереди ожидающих асинхронных вызовов должна выполняться в методе TApplication.Run (и TForm.ShowModal).
Аналогично механизму TThread.Synchronize или TThread.Queue.
Собственно, примерно так и сделано в .NET, JS (и Python скорее всего).
В Go и Kotlin кардинально другой механизм.
...
Рейтинг: 0 / 0
Почему поток не хочет уничтожаться, постоянно крутиться в процедуре TThread.WaitFor
    #40093884
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSerНет, выборка из очереди ожидающих асинхронных вызовов должна выполняться в
методе TApplication.Run (и TForm.ShowModal).

Код ProcessMessages отличается от кода ShowModal только отсуствием показа окна.
Так почему "нет"-то?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Почему поток не хочет уничтожаться, постоянно крутиться в процедуре TThread.WaitFor
    #40093894
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

DmSerНет, выборка из очереди ожидающих асинхронных вызовов должна выполняться в
методе TApplication.Run (и TForm.ShowModal).

Код ProcessMessages отличается от кода ShowModal только отсуствием показа окна.
Так почему "нет"-то?..


ProcessMessage это лишь вершина айсберга. И оно итак вызывается при необходимости.
...
Рейтинг: 0 / 0
Почему поток не хочет уничтожаться, постоянно крутиться в процедуре TThread.WaitFor
    #40093914
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSer
kealon(Ruslan)
пропущено...
об организации взаимодействия с внешним миром, слишком затратно по объёму рутинного кода выходит.


Для каждой функции, в которой есть вызов await, автоматически создаётся класс, в котором хранится состояние выполняемой операции. Это затратно по сравнению с классической машиной состояний. Но гораздо эффективнее по сравнению с многопоточным подходом.
конкретная реализация для NET имеет много как недостатков так и достоинств
В общем случае, никто не мешает использовать стек для хранения состояния, загнав его в Fiber. Для дельфи обёртка пишется довольно легко, но создать коммуникационную библиотеку ко всему виндовому API будет довольно трудозатратно.
...
Рейтинг: 0 / 0
23 сообщений из 48, страница 2 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Почему поток не хочет уничтожаться, постоянно крутиться в процедуре TThread.WaitFor
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]