zoukankan      html  css  js  c++  java
  • 进程、线程、纤程

    一、进程:计算机分配资源的基本单位-独立的内存空间;比如QQ

    • 父子进程:参考redis中的持久化方案,涉及的fork() :https://www.cnblogs.com/gabin/p/13666134.html
    • 父进程 fork() ->子进程    数据隔离(写时复制,没写之前只是个副本)
    • 僵尸进程:子进程结束后没有被父进程 kill
    • 孤儿进程:子进程kill之前,父进程killed

    二、线程:计算机执行任务调度的基本单位

    • 通常进程由一堆线程组成
    • 线程没有独立的内存空间,数据是共享的,所以存在高并发的数据一致性问题

    三、纤程:在线程的基础上,又衍生出了纤程,因为现代CPU已经发展到一定程度,实际上一个线程执行一定的逻辑的时候显得有些资源过剩

    • 可以将纤程理解为进行拆分出来的更细的执行单位,可以结合线程池这样的概念来理解
    • 适用场景:执行时间短的操作,执行时间短是一个相对概念,比如CPU性能特别强大,可能使得纤程的执行效率非常高
    • 用户态,切换及调度不需要经过操作系统(不需要切换到内核态)
    • 优点:
      • 占有资源少
      • 切换比较简单,只在用户态
      • 可以启动的数量高(10W+),和占有资源少有一定关系
    • 原生内置支持:
      • golang
      • scale
      • kotlin
      • python(lib),非原生支持
      • java(lib),非原生支持。Quasar(还不成熟)

    轻量趋势

    进程(重)->线程(普通)->纤程(轻)

    数据一致性问题

    • 多个进程之间由于内存独立,所以不存在这个问题
    • 多个线程之间由于数据是共享的,所以其实需要处理数据一致性问题,需要线程的时候需要切换上下文

    JVM线程-可能依赖操作系统的线程,而纤程完全在用户空间(JVM在用户空间,线程可能导致需要从用户态切换到内核态)

  • 相关阅读:
    如何判断两个IP是否在同一网段
    http://blog.csdn.net/a9529lty/article/details/6454156
    http://blog.csdn.net/a9529lty/article/details/6454145
    tomcat下配置https环境(windows环境)
    hosts文件配置及主要作用
    函数y=sin(1/x)曲线
    求证:a^4+b^4 ≧a^3*b+a*b^3
    三种双二次曲线
    已知m和n是两个整数,并且m^2+mn+n^2能被9整除,试证m,n都能被3整除。
    x为正变数,求y=x^3/(x^4+4)的最大值
  • 原文地址:https://www.cnblogs.com/gabin/p/13748377.html
Copyright © 2011-2022 走看看