zoukankan      html  css  js  c++  java
  • 进程,线程,协程

    进程:

    对于操作系统来说,一个任务就是一个进程(process).进程是程序的基本执行实体.进程是资源分配的基本单位

    每个进程相互独立,不影响主程序的稳定性,子进程崩溃没关系;

    通过增加CPU,就可以容易扩充性能;

    可以尽量减少线程加锁/解锁的影响,极大提高性能

    进程有独立的地址空间

    一个进程是无法访问另一个进程的变量和数据结构,如果想让一个进程访问另一个进程的资源,需要使用进程间通信,比如管道,文件,套接字等.

    线程:

    在一个任务中,需要运行多个子任务,我们把这些任务内的子进程称为'线程'. 线程是处理器调度的基本单位

    所以说一个进程至少有一个线程.

    线程是最小的执行单元,而进程至少由一个线程组成.

    线程没有独立的地址空间,同一进程内多个线程共享其资源

    一个进程可以拥有多个线程,每个线程使用其所属进程的栈空间,每个线程拥有自己的寄存器和栈,其他线程可以读写这些栈内存

    区别

    1地址和其他资源:进程间相互独立,同一进程的各线程间共享,某进程内的线程在其他进程内不可见.

    2 通信:进程间通信IPC(管道,信号量,共享内存,消息队列),线程间可以直接独写进程数据段(如全局变量)来进程通信--需要进程同步和互斥手段的辅助,以保护程序的一致性.

    3调度和切换:线程上下文切换比进程上下文切换快得多.

     协程:协程是一种用户态的轻量级线程,协程的调度完全由用户控制.协程拥有自己的寄存器上下文和栈.协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先钱保存的寄存器上下文和栈,直接操作栈则基本没有内核切换的开销,可以不加锁的访问全局变量,所以上下文的切换非常快

  • 相关阅读:
    Redis数据模型
    Redis集群使用的一些命令(持续更新)
    Redis简单集群搭建
    观察者模式
    抽象工厂模式
    简单工厂模式及其简单Java案例代码实现
    工厂方法模式及简单Java案例代码实现
    Java中的双重检查锁(double checked locking)
    BayaiM__MYSQL千万级数据量的优化方法积累__初级菜鸟
    BayaiM__Linux安装MySQL的两种方法
  • 原文地址:https://www.cnblogs.com/aln0825/p/11961881.html
Copyright © 2011-2022 走看看