Size: a a a

2020 November 24

МИ

Михаил Иванов... in Modern::Perl
Идеально было бы типа
Test::More::is_noblock(sub())
источник

МИ

Михаил Иванов... in Modern::Perl
Ну, там есть какие-то вычисления, как понять, время ушло на вычисления или на блокировку?
источник

VG

Vadim Goncharov in Modern::Perl
вот-вот, всё упрется в определение понятия блокировки
источник

МИ

Михаил Иванов... in Modern::Perl
Vadim Goncharov
вот-вот, всё упрется в определение понятия блокировки
Дык, типа "ждём IO и не передаём управление, хотя могли бы передать управление другой корутине, пускай пока делает что-нибудь полезное"
источник

AP

Anton Petrusevich in Modern::Perl
Михаил Иванов
Можно ли протестировать асинхронную функцию на наличие непреднамеренной блокировки?

Допустим, я пишу асинхронную функцию и внутри помимо неблокирующих операций по ошибке использую блокирующую операцию. В итоге в целом функция работает, но на самом деле есть затык.

Можно поймать наличие блокировки?
вряд ли. как пример: хрен ты поймаешь операцию с файлом. она может быть очень быстрой локально, но потом внезапно на nfs уже не так...
источник

AP

Anton Petrusevich in Modern::Perl
я, кстати, в том же моджо, не видел, чтобы они для файлов аио использовали
источник

МИ

Михаил Иванов... in Modern::Perl
Это если время засекать. Но ведь система где-то внутри знает, что мы чего-то ждали, даже если наносекунду. Надо у неё как-то спросить.
источник

AP

Anton Petrusevich in Modern::Perl
ну, есть перечень блокирующихся сисколлов
источник

AP

Anton Petrusevich in Modern::Perl
вернее, потенциально блокирующихся. читать файл можно из кеша или с реального носителя, а то и вообще с сетевого
источник

МИ

Михаил Иванов... in Modern::Perl
Тут скорее речь наверное  не про операционку, а про евентлуп. Был у него момент, когда он напоролся на ожидание?
источник

AP

Anton Petrusevich in Modern::Perl
ивентлуп может иметь некоторые предохранители на время исполнения колбэка, но воздействовать на них не может и допустимое время обработки может от разных условий отличаться
источник

YM

Yuri Myasoedov in Modern::Perl
Михаил Иванов
Можно ли протестировать асинхронную функцию на наличие непреднамеренной блокировки?

Допустим, я пишу асинхронную функцию и внутри помимо неблокирующих операций по ошибке использую блокирующую операцию. В итоге в целом функция работает, но на самом деле есть затык.

Можно поймать наличие блокировки?
Может смотреть на состояние процесса. Процесс по идее должен перейти в состояние waiting, когда ожидает ввод/вывод или какое-то событие
источник

AP

Anton Petrusevich in Modern::Perl
ну, так то можно и стрейсом посмотреть когда какие сисколы вызывались.
источник

VG

Vadim Goncharov in Modern::Perl
или распарсить скомпилированные опкоды и сравнить со списком блокирующих сисколлов
источник

VO

Vyacheslav Olkhovche... in Modern::Perl
Yuri Myasoedov
Может смотреть на состояние процесса. Процесс по идее должен перейти в состояние waiting, когда ожидает ввод/вывод или какое-то событие
и что? и ничего!
источник

МИ

Михаил Иванов... in Modern::Perl
В асинхроном коде никогда не будет состояния waiting? А когда он таки читает прилетевшие данные - это какое состояние?
источник

VG

Vadim Goncharov in Modern::Perl
но есть нюанс в том, что ивентлуп кагбе сообщает о готовности дескриптора, а читать из него будешь все равно "таким же" сисколлом
источник

VG

Vadim Goncharov in Modern::Perl
да, именно
источник

VO

Vyacheslav Olkhovche... in Modern::Perl
ну висит но на kevent/epool -- и что?
источник

VO

Vyacheslav Olkhovche... in Modern::Perl
это потому что все ждут или кто-то сдуру сам дернул?
источник