zoukankan      html  css  js  c++  java
  • day⑧: 线程与进程

    进程与线程:
    1.什么是线程(thread)?
    线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务

    一个线程是一个执行上下文,这是一个CPU的所有信息需要执行一系列的指令

    例如你在读书,现在你想休息一下,但是你希望回来可以从你停止的地方继续读,一个有效的方法你可以记录第几页,行数,和单词数,所以你读书执行上下文可以有3种方式
    如果你有一个宿友,她用相同的方法,她当你不用书的时候拿起书,并恢复她停止阅读的地方。然后你可以把书拿回来,并恢复你停止阅读的地方


    线程工作就好像这种方式,一个cpu给你一个假象它多个计算好像同一时间。它花费一点时间在每个计算上。
    它能够这样做因为它为每个计算上下文,好像你分享书给你的朋友,许多任务共享cpu

    一个或者多个技术层面,一个执行上下文(因此一个线程)是由cpu注册值组成 

    最后:线程不同进程,一个线程是执行上下文,而一个进程是一簇资源组成的计算,一个进程可以有一个或者多个线程
    说明:组成进程的资源包括:内存页(全部在进程里的线程有一样的内存视图),文件描述符(例如打开一个sockets句柄),和
    安全证书(例如一个用户启动进程它的id)
    2.什么是进程(process)
    一个程序实例化执行被称为一个进程

    每个进程提供了所需的资源来执行一个程序,一个进程有一个虚拟空间地址,执行代码,打开系统对象处理,一个安全上下文,一个独一无二的进程描述符,
    环境变量,一个优先类,最小和最大工作集大小,和至少有一个线程在执行。每一个进程启动由一个单个线程,通常称为主线程,
    但从它的任何线程可以创建额外的线程


    3.进程与线程的区别
    ①线程共享创建它的进程的地址空间,进程有自己的地址空间
    ②线程可以直接访问在这个进程的数据段,进程复制父进程的数据段。
    ③在进程里线程可以直接通讯其它的线程,进程必须通过兄弟姐妹进程间通信
    ④一个新的线程很容易创建,一个新的进程需要复制父进程
    ⑤在相同的进程里,线程可以互相控制。而进程只能控制它的子进程

    ⑥改变主线程可能会影响其它的线程,改变主进程不会影响子进程




    GIL


    In CPython, the global interpreter lock, or GIL, is a mutex that prevents multiple native threads from executing Python bytecodes at once. This lock is necessary mainly because CPython’s memory management is not thread-safe. (However, since the GIL exists, other features have grown to depend on the guarantees that it enforces.)


    GIL和线程锁(互斥锁Mutex)的区别:

    GIL: 为了防止,例如x个原生线程同时改同一份python字节码,而加的互斥锁,因为python调用的是c语言的线程接口、库,生成的操作系统的原生线程

    线程锁(互斥锁Mutex): 多线程共享的内存空间,也就意味着每个线程可以访问同一份数据,防止多个线程同时要修改一份数据,而加的一把锁,它是内存级别的。









  • 相关阅读:
    2019-1-7 水晶报表
    2018-12-25工作记录 空白行===水晶报表
    2018-7-26-随笔-泛型
    2018-7-20-随笔-转换
    2018-7-18-随笔-接口
    2018-7-17-随笔-params和ref、out用法、事件访问器
    VPS安装metasploit-framework
    Mimiktaz抓取本机密码
    msfvenom生成各类Payload命令
    docker容器开启ssh远程登录
  • 原文地址:https://www.cnblogs.com/binhy0428/p/5301626.html
Copyright © 2011-2022 走看看