【发布时间】:2020-05-19 04:27:29
【问题描述】:
当我在配备 A11 CPU 的 iPhone X 上的仪器中运行配置文件时。该 CPU 有两个性能核心和四个效率核心。
请问有没有办法判断哪个是性能核心?至于主线程,GCD会不会把主线程任务更多地放在性能核心上,而不是效率核心上?
我很想了解这实际上是如何工作的。
【问题讨论】:
标签: ios swift cpu background-process dispatch
当我在配备 A11 CPU 的 iPhone X 上的仪器中运行配置文件时。该 CPU 有两个性能核心和四个效率核心。
请问有没有办法判断哪个是性能核心?至于主线程,GCD会不会把主线程任务更多地放在性能核心上,而不是效率核心上?
我很想了解这实际上是如何工作的。
【问题讨论】:
标签: ios swift cpu background-process dispatch
GCD 对不同类型的内核一无所知,而且 GCD 也不决定哪些代码在哪个内核上运行。
GCD 决定哪个队列获得哪个线程池的线程,以及调度哪个代码在队列的线程上运行。
决定一个线程何时运行以及它将在哪个内核上运行由内核的线程调度来完成。并且内核还决定了在哪个 GCD 线程池中有多少线程可用。
主线程只是一个线程,就像任何其他线程一样。线程获得多少 CPU 时间取决于它自己的优先级、其他线程的数量、它们的优先级以及为每个线程安排的工作负载量。
由于 A11 允许所有 6 个内核同时处于活动状态,内核将决定哪个线程获得高性能内核,哪个线程只获得低性能内核。高优先级线程和具有高计算工作负载的线程(那些想要经常运行并且在运行时通常会耗尽其全部运行时间量的线程)是高性能内核的首选。低优先级线程和计算工作量少的线程(那些希望不经常运行且经常产生/阻塞的线程,尽管它们的运行时量子尚未用完)是低性能内核的首选。虽然理论上每个线程都可以在任何内核上运行,因为如果线程正在等待运行则让内核不使用会很愚蠢,但通常首选低功耗内核,因为这可以降低功耗并增加电池运行时间。
【讨论】: