Re[15]: Зачем нам асинхронность?
От: alex_public  
Дата: 15.08.20 22:59
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

_>>я не в курсе какой размер пула iocp потоков в .net по умолчанию, но весьма вероятно что больше 1).

НС>https://docs.microsoft.com/ru-ru/dotnet/api/system.threading.threadpool.getmaxthreads?view=net-5.0
НС>1000 обычно, емнип. Но вообще зависит от рантайма и его настроек.

Ничего себе. И что, все они стартуют сразу при старте любого .net приложения? Или надо начать асинхронный ввод-вывод? Или всё же не все сразу?
Re[9]: Зачем нам асинхронность?
От: alex_public  
Дата: 15.08.20 23:13
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

_>>Тогда этот фоновый поток будет у меня не таким тупым, а станет например актором. С которым gui-поток (тоже есть естественно актор) будет общаться с помощью сообщений. Ну или вместо акторов можно CSP взять — это уже зависит от остальных частей приложения. )

НС>А можно взять модель фьючерсов, которая тоже имеет право на жизнь.

Согласен.

И кстати сразу замечу, что к сопрограммам (как к инструменту "выпрямления") у меня никогда не было никаких претензий ни в каких языках. Да, имеют место различные споры по реализации (стековые, бесстековые и т.п.), но сама концепция — это однозначно полезный сахар. Все мои претензии в этой области относятся исключительно к сомнительному применению асинхронного ввода-вывода где-либо за пределами той узкой области, где он реально полезен. Ну а без асинхронного ввода-вывода "выпрямлять" то обычно и нечего...
Re[6]: Зачем нам асинхронность?
От: Lexey Россия  
Дата: 16.08.20 00:06
Оценка: +1
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Future или promise. Но МС любит альтернативную терминологию вводить.

НС>А сontinuation это ортогональное понятие, это не про таски, а про async/await.

С чего это оно не про таски? Task.ContinueWith прекрасно существует без async/await'ов. Это async/await'у без него туго было бы.
"Будь достоин победы" (c) 8th Wizard's rule.
Re[16]: Зачем нам асинхронность?
От: Ночной Смотрящий Россия  
Дата: 16.08.20 07:07
Оценка:
Здравствуйте, alex_public, Вы писали:

_>Ничего себе. И что, все они стартуют сразу при старте любого .net приложения? Или надо начать асинхронный ввод-вывод? Или всё же не все сразу?


Странные вопросы. Зачем им стартовать сразу?
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[6]: Зачем нам асинхронность?
От: Sharov Россия  
Дата: 16.08.20 11:26
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

S>>Потому что для асинхронности может быть достаточно одной таски(=поток).

НС>Ничего не понял. Что значит достаточно одной таски и почему это важно? И нет, таска != поток.

Асинхронность не тождественна понятию "task". Одной таски, которая в данном частном случае будет 1:1 с потоком,
хватит для асинхронности.

S>> Библиотека для работы и создания таксков тут может быть излишняя.

НС>Для чего излишняя?

Она вообще не нужна, если цель асинхронность. См. non-blocking io, select/epoll и т.д.

S>>Очень классно сформулировано . Единственное что не нравится, это слово callback, уж больно оно перегружено.

НС>В данном контексте оно имеет вполне конкретное значение.

Т.к. ниже замечено, что callback -- это принцип. А тут речь идет об абстракциях, которые могут быть самостоятельно запланированы,
так и организованы в структуру даннах -- т.е. одно после другого, одно после всех и т.д.

S>>Т.е. слово future или сontinuation подошло бы больше.

НС>Future или promise. Но МС любит альтернативную терминологию вводить.
НС>А сontinuation это ортогональное понятие, это не про таски, а про async/await.

сontinuation именно про таски, я называю так код в ContinueWith(t=>{some code},options). Собственно,
продолжением можно считать код после выражения await(это не совсем так, там другой принцип -- КА, но суть в том,
чтобы выполнить задачу,после этой задачи). А async\await -- сахар для организации задач(и) в структуру данных.
Кодом людям нужно помогать!
Re[4]: Зачем нам асинхронность?
От: Sharov Россия  
Дата: 16.08.20 11:35
Оценка: +1
Здравствуйте, Kolesiki, Вы писали:

K>Что такое вообще слово "асинхронно"?


"Not synchronous; occurring at different times." https://en.wiktionary.org/wiki/asynchronous

K>Это значит, что есть минимум 2 неких процесса, работающих независимо друг от друга (т.е. им не надо синхронизировать друг с другом свою работу). Так что любой трэд, TPL или нечто "сбоку" от главной программы — это и есть "асинхронное исполнение".


Асинхронность никаких процессов, тредов, задач не подразумевает вообще, от слова совсем.
Достаточно одного любого исполнителя. Эти абстракции вводят для того, чтобы эффективнее
утилизировать CPU, повышать отклик системы и т.д. Почитайте как с nodejs и
подобные сервера с помощью одного потока и non-blocking io держат не хилую нагрузку.
Кодом людям нужно помогать!
Re[16]: Зачем нам асинхронность?
От: Sharov Россия  
Дата: 16.08.20 12:20
Оценка:
Здравствуйте, alex_public, Вы писали:


S>>Результат io операции в асинхронном случае получает iocp поток, зачем ему ждать пользовательский поток? Т.е.

S>>callback (это же можно назвать сопрограммой?) будет выполнен в контексте iocp потока.

_>Я тут имел в виду, что если ты напишешь что-то вроде:

_>
_>data=await DownloadFile();
_>Parse(data);
_>

_>в gui потоке, то функция parse опять же будет вызвана в gui потоке, который на момент отработки соответствующего Iocp потока вполне может быть чем-то занят.

Отличный пример! Не будет он ничего ждать, потому что именно для этого существует контекст
синхронизации(synchronizationcontext). iocp поток сделает post соотв. контексту и будет свободен.
За одно еще больше понял роль всяческих synchronizationcontext'ов.
Кодом людям нужно помогать!
Re[7]: Зачем нам асинхронность?
От: Ночной Смотрящий Россия  
Дата: 16.08.20 18:46
Оценка:
Здравствуйте, Sharov, Вы писали:

S>Асинхронность не тождественна понятию "task".


А кто то утверждал что тождественна?

S> Одной таски, которая в данном частном случае будет 1:1 с потоком,

S>хватит для асинхронности.

И?

S>>> Библиотека для работы и создания таксков тут может быть излишняя.

НС>>Для чего излишняя?
S>Она вообще не нужна, если цель асинхронность.

Ничего не понял.

S> См. non-blocking io, select/epoll и т.д.


И?

S>>>Т.е. слово future или сontinuation подошло бы больше.

НС>>Future или promise. Но МС любит альтернативную терминологию вводить.
НС>>А сontinuation это ортогональное понятие, это не про таски, а про async/await.
S>сontinuation именно про таски,

Нет.

S>чтобы выполнить задачу,после этой задачи). А async\await -- сахар для организации задач(и) в структуру данных.


Бинго!
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[8]: Зачем нам асинхронность?
От: Sharov Россия  
Дата: 16.08.20 21:30
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

S>> Одной таски, которая в данном частном случае будет 1:1 с потоком,

S>>хватит для асинхронности.
НС>И?

TPL для асинхронности не нужна.

S>> См. non-blocking io, select/epoll и т.д.

НС>И?

Что и?

S>>сontinuation именно про таски,

НС>Нет.

Почему нет?
Кодом людям нужно помогать!
Re[7]: Зачем нам асинхронность?
От: Sharov Россия  
Дата: 16.08.20 21:34
Оценка:
Здравствуйте, Lexey, Вы писали:

НС>>Future или promise. Но МС любит альтернативную терминологию вводить.

НС>>А сontinuation это ортогональное понятие, это не про таски, а про async/await.
L>С чего это оно не про таски? Task.ContinueWith прекрасно существует без async/await'ов. Это async/await'у без него туго было бы.

Continuation, конечно, про таски. Но вот async\await обходится без них -- там КА строится.
Кодом людям нужно помогать!
Re[9]: Зачем нам асинхронность?
От: Ночной Смотрящий Россия  
Дата: 17.08.20 09:02
Оценка:
Здравствуйте, Sharov, Вы писали:

S>>> Одной таски, которая в данном частном случае будет 1:1 с потоком,

S>>>хватит для асинхронности.
НС>>И?
S>TPL для асинхронности не нужна.

А кто говорил что обязательно нужна?

S>>> См. non-blocking io, select/epoll и т.д.

НС>>И?
S>Что и?

К чему ты это написал?

S>>>сontinuation именно про таски,

НС>>Нет.
S>Почему нет?

Потому что continuation может быть без тасков и таски без continuation.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[8]: Зачем нам асинхронность?
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 17.08.20 09:21
Оценка:
Здравствуйте, Sharov, Вы писали:

S>Continuation, конечно, про таски. Но вот async\await обходится без них -- там КА строится.

Ну вот вызов Next КА вполне себе может выполняться в ContinueWith
Во всяком случае на TS они использовали Promise.then
https://stackoverflow.com/questions/42412145/what-is-a-state-machine-in-terms-of-javascript-promises-and-c-sharp-asyc-await

ну и использую для различных паттернов смотри Операции с чередованием
https://docs.microsoft.com/ru-ru/dotnet/standard/asynchronous-programming-patterns/consuming-the-task-based-asynchronous-pattern
и солнце б утром не вставало, когда бы не было меня
Отредактировано 17.08.2020 12:18 Serginio1 . Предыдущая версия .
Re[10]: Зачем нам асинхронность?
От: Sharov Россия  
Дата: 17.08.20 09:31
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>>>И?

S>>TPL для асинхронности не нужна.
НС>А кто говорил что обязательно нужна?

2) В дотнете есть такая штука как TPL. Вот это уже та самая асинхронность.


TPL для асинхронности не нужна.

S>>>> См. non-blocking io, select/epoll и т.д.

НС>>>И?
S>>Что и?
НС>К чему ты это написал?

Про механизмы, обеспечивающие асинхронность с одним потоком.

S>>Почему нет?

НС>Потому что continuation может быть без тасков и таски без continuation.

continuation это таска-продолжение другой таски, как она может быть без? Хотелось бы пример:

continuation может быть без тасков

Кодом людям нужно помогать!
Re: Зачем нам асинхронность?
От: ksandro Мухосранск  
Дата: 17.08.20 10:13
Оценка:
Здравствуйте, Kolesiki, Вы писали:

K>Зачем нам нужна асинхронность? (в контексте GUI программ, взаимодействующих с юзером)

K>...
K>Заметьте — я ничего не говорю про мультипоточность — она нужна, хотя опять же, далеко не везде.
K>...

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

Для параллельного исполнения вполне можно и нужно использовать несколько процессов а не потоков. Для того, чтоб организовать работу нескольких задач в рамках одного процесса можно и нужно использовать ассинхронность. А от тредов одни проблемы! Впринципе так оно и работало когда-то, не знаю, почему в свое время начали активно везде внедрять эти потоки, причем их активно пропагандировали еще до массового появления многоядерных процессоров.
Re[2]: Зачем нам асинхронность?
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 17.08.20 11:34
Оценка:
Здравствуйте, ksandro, Вы писали:

K>Здравствуйте, Kolesiki, Вы писали:


K>>Зачем нам нужна асинхронность? (в контексте GUI программ, взаимодействующих с юзером)

K>>...
K>>Заметьте — я ничего не говорю про мультипоточность — она нужна, хотя опять же, далеко не везде.
K>>...

K>А вот я считаю, что многопоточность не нужна. По крайней мере не нужна в том виде, в каком она сделана сейчас почти везде. Нельзя свободно давать писать разным потокам в одну облась памяти, а затем долго трахаться с выявлением всех дед локов и рэйс кондишенов, и в итоге получить решение, работающее в разы медленнее чем однопоточное.

Ну а что вместо потоков? Ну можно например держать поток(и) только для записи и организовать очередь. Можно сделать версионность как в БД для чтения.

K>Для параллельного исполнения вполне можно и нужно использовать несколько процессов а не потоков. Для того, чтоб организовать работу нескольких задач в рамках одного процесса можно и нужно использовать ассинхронность. А от тредов одни проблемы! Впринципе так оно и работало когда-то, не знаю, почему в свое время начали активно везде внедрять эти потоки, причем их активно пропагандировали еще до массового появления многоядерных процессоров.


Ну вот берем БД и как несколько процессов решит проблему проблему с чтением записью в файл.
и солнце б утром не вставало, когда бы не было меня
Re[11]: Зачем нам асинхронность?
От: Ночной Смотрящий Россия  
Дата: 17.08.20 12:10
Оценка:
Здравствуйте, Sharov, Вы писали:

НС>>А кто говорил что обязательно нужна?

S>

S>2) В дотнете есть такая штука как TPL. Вот это уже та самая асинхронность.

S>TPL для асинхронности не нужна.

В цитате нет слов "обязательно" и "нужна".

S>>>>> См. non-blocking io, select/epoll и т.д.

НС>>>>И?
S>>>Что и?
НС>>К чему ты это написал?
S>Про механизмы, обеспечивающие асинхронность с одним потоком.

И?

S>>>Почему нет?

НС>>Потому что continuation может быть без тасков и таски без continuation.
S>continuation это таска-продолжение другой таски, как она может быть без?

Может быть ровно одна таска. Может быть Parallel.For. И т.п.

S> Хотелось бы пример:

S>

S>continuation может быть без тасков


yield
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[9]: Зачем нам асинхронность?
От: Ночной Смотрящий Россия  
Дата: 17.08.20 12:12
Оценка: +1
Здравствуйте, Serginio1, Вы писали:

S>>Continuation, конечно, про таски. Но вот async\await обходится без них -- там КА строится.

S>Ну вот вызов Next КА вполне себе может выполнять ContinueWith

Но не выполняет.

И, в любом случае, это внутренние детали реализации асинков, на общую схему это не влияет никак. Завтра поменяют КА на вызов ContinueWith и ничего принципиально при этом не поменяется.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[2]: Зачем нам асинхронность?
От: Ночной Смотрящий Россия  
Дата: 17.08.20 12:13
Оценка:
Здравствуйте, ksandro, Вы писали:

K>не знаю, почему в свое время начали активно везде внедрять эти потоки, причем их активно пропагандировали еще до массового появления многоядерных процессоров.


Ну так узнай.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[10]: Зачем нам асинхронность?
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 17.08.20 12:29
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Здравствуйте, Serginio1, Вы писали:


S>>>Continuation, конечно, про таски. Но вот async\await обходится без них -- там КА строится.

S>>Ну вот вызов Next КА вполне себе может выполнять ContinueWith

НС>Но не выполняет.


НС>И, в любом случае, это внутренние детали реализации асинков, на общую схему это не влияет никак. Завтра поменяют КА на вызов ContinueWith и ничего принципиально при этом не поменяется.


В общем то согласен. Кстати https://habr.com/ru/post/260217/
Dissecting the async methods in C#
Вместо ContinueWhith используют UnsafeOnCompleted
https://docs.microsoft.com/ru-ru/dotnet/api/system.runtime.compilerservices.taskawaiter.unsafeoncompleted?view=netcore-3.1
и солнце б утром не вставало, когда бы не было меня
Отредактировано 17.08.2020 12:46 Serginio1 . Предыдущая версия .
Re[3]: Зачем нам асинхронность?
От: ksandro Мухосранск  
Дата: 17.08.20 14:57
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Здравствуйте, ksandro, Вы писали:


K>>не знаю, почему в свое время начали активно везде внедрять эти потоки, причем их активно пропагандировали еще до массового появления многоядерных процессоров.


НС>Ну так узнай.


Ну, расскажи! Какие вообще плюсы у потоков перед процессами? Как по мне так в текущих реализзациях многопоточность дает только возможность понаделать кучу ошибок на ровном месте, иольше ничего!
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.