iOS面试题:app运行过程中,同时最多有几个线程,怎么实现的高并发

96
iOS猿_员
0.4 2019.01.26 16:07* 字数 687

原文:iOS面试题大全

同时最多有几个线程: 根据cpu的能力,目测:50个

生活中遇到的很多场景,多是IO密集型。解决这类问题的核心思想就是减少cpu空转的时间,增加CPU的利用率。具体有下面两种方法:
限制活动线程的个数不超过硬件线程的个数

  • 活动线程指Runnable状态的线程。
  • Blocked状态的线程个数不在限制内。Blocked状态的线程都在等待外部事件触发,比如鼠标点击、磁盘IO操作事件,操作系统会将他们移除到调度队列外,所以它们不会消耗cpu时间片。程序可以有很多的线程,但是只要保证活动的线程个数小于硬件线程的个数,运行效率是可以保证的。
  • 计算密集型和IO密集型线程是要分开看待的。计算密集型线程应该永远不被block,大部分时间都要保证runnable状态。要有效的利用处理器资源,可以让计算密集型的线程个数跟处理器个数匹配。而IO密集型线程大部分时间都在等待IO事件,不需要太多的线程。

基于任务的编程(协程)
线程个数跟硬件线程一致。任务调度器把对应的任务放入跟线程做一个映射,放入到相应的线程执行。有几个明显的优势:

  • 按需调度。线程调度器的时间片是公平的分配给各个线程的,因为它不不理解程序的业务逻辑。这就跟计划经济样的,极度的公平就是不公平,市场经济这种按需分配才能提高效率。任务调度器是理解任务信息的,可以更有效的调度任务。
  • 负载均衡。将程序分成一个个小的任务,让调度器来调度,不让所有的线程空跑,保证线程随时有活干。有效的利用计算资源、平衡计算资源。
  • 更易编程。以线程为基础的编程,要提高效率,经常要考虑到底层的硬件线程,考虑线程调度受到的影响。但是如果基于任务来编程,只要集中注意力在任务之间的逻辑关系上,处理好任务之间的关系。调度效率可以交给调度器来管控。
iOS面试题小集
Web note ad 1