iOS中的异步操作是否在内部创建一个新线程,并为其分配任务?

问题描述 投票:-1回答:1

是否在iOS中执行异步操作,在内部创建一个新线程,并为其分配任务?

ios swift
1个回答
0
投票

异步操作能够在内部创建一个新线程并为其分配任务。但是为了实现这一点,您需要运行一个异步操作,该操作将创建一个新线程并为其分配任务。换句话说:没有直接的相关性。

我假设异步表示类似DispatchQueue.main.async { <#code here#> }的意思。这不会创建新线程,因为主线程应该已经存在。可以通过一系列操作和一个无穷循环(基本上就是RunLoop的目的)来解释这种工作原理和方式(如果过于简化)。想象以下内容:

Array<Operations> allOperations;

int main() {
    bool continueRunning = true;
    for(;continueRunning;) {
        allOperations.forEach { $0.run(); }
        allOperations.clear();
    }
    return 0;
}

并且当您调用类似DispatchQueue.main.async的名称时,它基本上会创建一个新操作并将其插入allOperations。同一线程最终将进入新循环(在for循环内)并异步调用您的操作。再次记住,这只是为了说明所有概念背后的想法而过分简化了。您也可以从中想象一下计时器是如何工作的。该操作将评估当前时间是否大于下一个计划执行的时间,如果是,它将触发定时器操作。这也是为什么计时器不能非常精确的原因,因为它们取决于其余的执行,并且线程可能很忙。

另一方面,当您创建新队列DispatchQueue(label: "Will most likely run on a new thread")时,可能会产生一个新线程。何时准确创建线程不是必须要解决的问题。它可能与运行的实现和系统不同。该工具将仅保证执行其设计目的,而不保证将如何执行。

然后还有Thread类可以生成新线程。但是这笔交易与先前的交易相同。它可以在内部立即创建一个新线程,也可以稍后再懒惰地执行。它所保证的就是它将在其公共接口上正常工作。

我并不是说这些事情会随着时间,实现或系统的运行而改变。我只是说他们有可能,而且可能有。

© www.soinside.com 2019 - 2024. All rights reserved.