可以将多线程定义为有助于CPU创建和执行并发线程的过程。通常,CPU一次执行一次操作。但是,通过使用多线程,无涯教程可以允许CPU在不同的任务之间切换,以便可以同时执行它们。
在iOS中,UI具有其线程。当无涯教程执行复杂的任务时,UI保持不变。让无涯教程考虑一个场景,在该场景中无涯教程在后台执行一些上传任务,并在前台运行该应用程序。在这里,iPhone如此快速地在两个线程之间切换,直到线程完成为止。在这里,无涯教程不需要按顺序执行任务,因为iPhone可以在上传文件和绘制屏幕之间进行切换。
GCD代表Grand-Central-Dispatch,它是一个API,用于在工作池上执行关闭。在此,以先进先出(FIFO)的顺序执行。
CPU将要执行的任务由应用程序以块的形式提交到调度队列。该块在系统提供的线程池上执行。分派队列中的所有任务都可以顺序执行或并发执行。但是,分派队列始终保持任务的FIFO顺序。
链接:https://www.learnfk.comhttps://www.learnfk.com/ios/multithreading-in-swift.html
来源:LearnFk无涯教程网
通过提交任务以分派系统管理的队列,该框架有助于在多核系统上同时执行代码。
使应用程序对用户保持响应是当今最常见的做法。但是,为了满足无涯教程的要求,无涯教程始终在向无涯教程的应用程序中添加新功能,从而使其运行速度变慢且用户友好性降低。
为了使应用程序更快,响应速度更快,无涯教程可以使用GCD运行应用程序线程并将信息呈现给用户。例如,如果无涯教程要解析一个需要花费10或15秒才能解析的大型JSON文件,那么无涯教程始终可以运行一个线程,该线程可以向用户显示加载中,以便假定正在处理某些任务。
让无涯教程看一个示例,在该示例中,无涯教程将任务异步分配到主队列。
import UIKit class ViewController: UIViewController { @IBOutlet weak var tableView: UITableView! let refreshControl = UIRefreshControl() var arr = Array() override func viewDidLoad() { super.viewDidLoad() //Do any additional setup after loading the view. var n: Int = 2 var value:Int = 1 DispatchQueue.main.async { debugPrint("printing table of \(n)") for i in 1...10 { value = i print(n*i) } } for i in 0...10 { n = i print("Value = " + n.description) } DispatchQueue.main.async { n = 9 print(n) } } }
输出:
Value = 0 Value = 1 Value = 2 Value = 3 Value = 4 Value = 5 Value = 6 Value = 7 Value = 8 Value = 9 Value = 10 "printing table of 10" 10 20 30 40 50 60 70 80 90 100 9
祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)