185 похожих чатов

32 ответов

32 просмотра
Куся 🌿⃤ __UKS- Автор вопроса

ну вообще я не разбираюсь в этом, просто к тому что в оф.документации и не написано что оно должно работать в главном треде

Куся 🌿⃤ __UKS
ну вообще я не разбираюсь в этом, просто к тому чт...

А так тогда вызывать API с ассертами на мейн тред если очереди вместе с акторами использовать нельзя? )

Куся 🌿⃤ __UKS
ну вообще я не разбираюсь в этом, просто к тому чт...

И, кстати, первое, что надо запомнить, разбираясь — это что main thread != main queue. Но не всегда.

Куся 🌿⃤ __UKS- Автор вопроса
Andrey
А так тогда вызывать API с ассертами на мейн тред ...

ну например используя систему сигналов. В одном месте сигнал посылаешь, в мейн треде принимаешь и делаешь что нужно

Alex Sherbakov
И, кстати, первое, что надо запомнить, разбираясь ...

в иос всегда, поэтому и стали mainactor использовать как main thread

Куся 🌿⃤ __UKS
ну например используя систему сигналов. В одном ме...

А как принять сигнал в мейн треде в iOS-ной аппе посланный из какого-нибудь актора?

Куся 🌿⃤ __UKS
ну например используя систему сигналов. В одном ме...

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

Pavel Shilyagov
в иос всегда, поэтому и стали mainactor использова...

В iOS да, но я постоянно забываю, что у нас чатик про iOS, сорян :)

Alex Sherbakov
В iOS да, но я постоянно забываю, что у нас чатик ...

думаю поэтому они и напиали эквивалент main queue, чтобы не было непонимания че это такое на серверном приложении

Pavel Shilyagov
думаю поэтому они и напиали эквивалент main queue,...

Возможно, да. Этакая "псевдо-main" очередь.

Pavel Shilyagov
в иос всегда, поэтому и стали mainactor использова...

Не всегда таки. Могу кусок кода дать прямо сейчас. :)

Pavel Shilyagov
да, давай, интересно

Чтоб не облажаться, проверю сначала на iOS :)

Pavel Shilyagov
да, давай, интересно

Конкретно в iOS — таки, похоже, всегда. В консольной программе macOS — не всегда. Код: let serialQueue = DispatchQueue(label: "com.my.serial.queue") let yetAnotherSerialQueue = DispatchQueue(label: "com.my.serial.queue2") DispatchQueue.global().async { print("\r1: \(Thread.current)\r" + "Label: \(OperationQueue.current?.underlyingQueue?.label ?? "None")\r") serialQueue.sync { print("\r2: \(Thread.current)\r" + "Label: \(OperationQueue.current?.underlyingQueue?.label ?? "None")\r") DispatchQueue.main.sync { print("\r3: \(Thread.current)\r" + "Label: \(OperationQueue.current?.underlyingQueue?.label ?? "None")\r") yetAnotherSerialQueue.sync { print("\r4: \(Thread.current)\r" + "Label: \(OperationQueue.current?.underlyingQueue?.label ?? "None")\r") } } } }

Alex Sherbakov
Конкретно в iOS — таки, похоже, всегда. В консольн...

ну в ios это всетаки критически важно чтобы всегда можно было вызвать кусок кода из main thread. Если DispatchQueue.main это не гарантирует, то кому тогда вообще верить?

Alex Sherbakov
Конкретно в iOS — таки, похоже, всегда. В консольн...

так это просто две serial queues, а если запустить одну через dispatchMain() ? будет по идее всегда на мейн треде

Andrey
так это просто две serial queues, а если запустить...

Что значит "просто"? DispatchQueue.main — это главная очередь, не какая-нибудь там "одна из".

А, понял. Интересно, как они в iOS добились что всегда мейн?

Denis Valeryevich
а на вапоре не так что ли?)

Я не проверял, но похоже, что нет...

Denis Valeryevich
а на вапоре не так что ли?)

На вапоре был issue на гитхабе, что DispatchQueue.main вообще не активна, и если вы, дескать, используете в своем коде диспетчеризацию в главную очередь, то она не будет выполняться. Предлагали починить.

Alex Sherbakov
Конкретно в iOS — таки, похоже, всегда. В консольн...

А что будет если в начале объявить очереди DispatchQueue(label: “”, attributes: .concurrent) Не за компом, проверить не могу пока сам.

Jaleel Akbash
А что будет если в начале объявить очереди Dispatc...

1: <NSThread: 0x600003c664c0>{number = 6, name = (null)} Label: None 2: <NSThread: 0x600003c664c0>{number = 6, name = (null)} Label: None 3: <_NSMainThread: 0x600003c1ce00>{number = 1, name = main} Label: com.apple.main-thread 4: <_NSMainThread: 0x600003c1ce00>{number = 1, name = main} Label: com.apple.main-thread

А ну да, там же все .sync 🤦‍♂️ интересно как будет с .async. Ладно, спать в любом случае пойду, тяжело уже код читать. 😅

Jaleel Akbash
А ну да, там же все .sync 🤦‍♂️ интересно как будет...

Не, я уже наигрался в свое время всякими вариантами, мне больше неинтересно :)

Alex Sherbakov
Не, я уже наигрался в свое время всякими вариантам...

Ну насколько помню DispatchQueue serial по дефолту и и async там надо учитывать. Короче да, завтра сам гляну. 🙂

Jaleel Akbash
Наоборот же? 🤔

Ой. Ну да, сорян :)

Alex Sherbakov
Ой. Ну да, сорян :)

Так это меняет картину, если написать `

Alex Sherbakov
Ой. Ну да, сорян :)

Так это меняет картину, если написать let serialQueue = DispatchQueue(label: "com.my.serial.queue") let yetAnotherSerialQueue = DispatchQueue(label: "com.my.serial.queue2") DispatchQueue.global().sync { print("\r1: \(Thread.current)\r" + "Label: \(OperationQueue.current?.underlyingQueue?.label ?? "None")\r") serialQueue.async { print("\r2: \(Thread.current)\r" + "Label: \(OperationQueue.current?.underlyingQueue?.label ?? "None")\r") DispatchQueue.main.async { print("\r3: \(Thread.current)\r" + "Label: \(OperationQueue.current?.underlyingQueue?.label ?? "None")\r") yetAnotherSerialQueue.async { print("\r4: \(Thread.current)\r" + "Label: \(OperationQueue.current?.underlyingQueue?.label ?? "None")\r") } } } }

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Раз начали говорить про embassy, то присоединюсь со своими парой вопросов. 1) Есть ли сопоставимые аналоги для асинхронного кода в emdebbed? 2) Можно ли внутри задач embassy ...
NI_isx
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
1
Он в одиночку это дело запилил или была какая-то команда?
Aquinary
12
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Карта сайта