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

32 ответов

38 просмотров
Куся 🌿⃤ __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") } } } }

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта