美文网首页
Objective-C 线程篇(一): 线程、进程相关常见几个名

Objective-C 线程篇(一): 线程、进程相关常见几个名

作者: Tenloy | 来源:发表于2018-10-17 16:17 被阅读64次

    # 并发:

    同一时间段有几个程序都处于已经启动到运行完毕之间,并且这几个程序都在同一个处理机上运行,并发的两种关系是同步和互斥

    # 并行:

    单处理器中进程被交替执行,表现出一种并发的外部特征;在多处理器中,进程可以交替执行,还能重叠执行,实现并行处理,并行就是同时发生的多个并发事件,具有并发的含义,但并发不一定是并行,也就是说事件之间不一定要同一时刻发生

    并行是指同一时刻同时做多件事情,而并发是指同一时间间隔内做多件事情。
    并行是任务在同一时间运行,例如,在多核处理器上,并发是两个任务可以在重叠的时间段内启动,运行和完成。
    
    并行是并发,但并发不一定是并行,比如:
    
    我们说资源请求并发数达到了1万。这里的意思是有1万个请求同时过来了。但是这里很明显不可能真正的同时去处理这1万个请求的吧!如果这台机器的处理器有4个核心,不考虑超线程,那么我们认为同时会有4个线程在跑。
    也就是说,并发访问数是1万,而底层真实的并行处理的请求数是4。如果并发数小一些只有4的话,又或者你的机器牛逼有1万个核心,"那并发在这里和并行一个效果"。也就是说,并发可以是虚拟的同时执行,也可以是真的同时执行。而并行的意思是真的同时执行。
    结论是:
      并行是我们物理时空观下的同时执行
      并发则是操作系统用线程这个模型抽象之后站在线程的视角上看到的“同时”执行。
    
    并行执行的处理数量取决于打得当前系统的状态,即iOS和 OS X基于Dispatch Queue中的处理数、CPU核数以及CPU负荷等当前系统的状态来决定并行队列中并行执行的处理数
    

    # 互斥:

    进程之间访问临界资源时相互排斥的现象

    # 同步:

    进程之间存在依赖关系,一个进程结束的输出作为另一个进程的输入。具有同步关系的一组并发进程之间发送的信息称为消息或者事件

    # 异步:

    和同步相对,同步是顺序执行,而异步是彼此独立,在等待某个事件的过程中继续做自己的事,不要等待这一事件完成后再工作。线程是实现异步的一个方式,异步是让调用方法的主线程不需要同步等待另一个线程的完成,从而让主线程干其他事情。

    # 多线程:

    多线程是进程中并发运行的一段代码,能够实现线程之间的切换执行

    # 异步和多线程:

    不是同等关系,异步是目的,多线程只是实现异步的一个手段,实现异步可以采用多线程技术或者交给其他进程来处理。

    你可以看下下面的例子,还是以你的场景为例,一个火车站为一个进程,一个窗口和售票员的组合为一个线程(你说的只有窗口没有售票员这种情况是不对的,相当于只暴露了接口,没有实现,我们买票的人也不会去这种空窗口买票的!!):
    
    多线程:
      火车站开了N个窗口售票员,我们去买票,会有工作人员(CPU)指定我们去某个窗口买票,你被安排到某个窗口后,告诉售票员你的请求(咨询或买票),售票员执行操作,如果这个过程中发送的阻塞,也是窗口售票员的阻塞(比如查票的过程),但是因为你开了很多个窗口,其他买票的人可以被安排去另外的空闲窗口,如果所有窗口都满了,工作人员就不会给你安排了,直到有空的窗口出来;
    
    多进程(并行):
      建多个火车站售票,火车站与火车站间互不影响,看买票的自己想去哪里(这里不讨论负载均衡);
    
    异步:
      火车站只有一个窗口售票员,但是窗口前有一个登记台(事件循环),你把你想买的票告诉给登记台,并留下你的手机(回调函数),然后你就可以走了,由于登记台只是登记了你的请求,并没有做任何其他操作,所以这个耗时基本忽略不计的。之后售票员处理完了上一个任务了,就会自己去登记台取剩下的未完成的任务,直到取到你的任务,操作完后,有票没票都会通过手机通知你,如果有票还会往你的手机发车票的二维码;
    
    所以异步的操作对客户端来说是最节省时间的
    
    

    相关文章

      网友评论

          本文标题:Objective-C 线程篇(一): 线程、进程相关常见几个名

          本文链接:https://www.haomeiwen.com/subject/pterzftx.html