• 线程与进程


    线程:是操作系统最小的调度单位, 是一串指令的集合
    进程:是各种资源管理的集合。
     
    线程与进程的区别:
    • 线程共享内存空间,进程是独立的。
    • 同一进程内的线程相互可以直接访问,进程间的通信必须借助中间代理实现。
    • 新的线程很容易被创建,新的进程不要对其父进程进行一个克隆。
    • 一个线程可以控制和操作同一个进程内的其他线程,但进程只能操作其子进程。
    • 对主线程的修改可能会影响到其他线程,但对父进程的修改不会影响到子进程。
     

    计算密集型 vs. IO密集型

    是否采用多任务的第二个考虑是任务的类型。我们可以把任务分为计算密集型和IO密集型。

       计算密集型任务的特点是要进行大量的计算,消耗CPU资源,比如计算圆周率、对视频进行高清解码等等,全靠CPU的运算能力。这种计算密集型任务虽然也可以用多任务完成,但是任务越多,花在任务切换的时间就越多,CPU执行任务的效率就越低,所以,要最高效地利用CPU,计算密集型任务同时进行的数量应当等于CPU的核心数。

       计算密集型任务由于主要消耗CPU资源,因此,代码运行效率至关重要。使用多进程

       第二种任务的类型是IO密集型,涉及到网络、磁盘IO的任务都是IO密集型任务,这类任务的特点是CPU消耗很少,任务的大部分时间都在等待IO操作完成(因为IO的速度远远低于CPU和内存的速度)。对于IO密集型任务,任务越多,CPU效率越高,但也有一个限度。常见的大部分任务都是IO密集型任务,比如Web应用。

       IO密集型任务执行期间,99%的时间都花在IO上,花在CPU上的时间很少,使用多线程

    异步IO

       考虑到CPU和IO之间巨大的速度差异,一个任务在执行的过程中大部分时间都在等待IO操作,单进程单线程模型会导致别的任务无法并行执行,因此,我们才需要多进程模型或者多线程模型来支持多任务并发执行。

       现代操作系统对IO操作已经做了巨大的改进,最大的特点就是支持异步IO。如果充分利用操作系统提供的异步IO支持,就可以用单进程单线程模型来执行多任务,这种全新的模型称为事件驱动模型,Nginx就是支持异步IO的Web服务器,它在单核CPU上采用单进程模型就可以高效地支持多任务。在多核CPU上,可以运行多个进程(数量与CPU核心数相同),充分利用多核CPU。由于系统总的进程数量十分有限,因此操作系统调度非常高效。用异步IO编程模型来实现多任务是一个主要的趋势。

  • 相关阅读:
    依赖注入模式与反模式
    WPF异常——某个ItemsControl与它的项源不一致
    C# 3进化的数据访问之智能的编译器
    C# 2的重大改进之可空类型
    C# 1之外:构建于坚实基础上的新特性
    C# 1的核心基础之二——类型系统
    C# 1的核心基础之一——委托
    C#进化史
    单一职责原则
    HBase简介
  • 原文地址:https://www.cnblogs.com/xhyan/p/8383829.html
Copyright © 2020-2023  润新知