进程和线程

什么是进程?

计算机程序只不过是磁盘中可执行的二进制(或者其他类型)的数据。它们只是在被读取到内存中被操作系统调用的时候才开始它们的生命周期。
进程(有时候被称为重量级进程)是程序的一次执行。每一个进程都有自己的地址空间、内存、数据栈以及其他记录起运行轨迹的辅助数据。操作系统管理其上运行的所有进程,并为这些进程公平的分配时间、进程也可以通过fork和spawn操作类完成其他的任务。不过各个进程有自己的内存空间、数据栈等,所以只能使用进程间通讯(interprocess communication, IPC),而不能直接共享信息。

什么是线程?

线程(有时候被称为轻量级进程)和进程有些相似,不同的是,所有的线程运行在同一个进程中, 共享相同的运行环境。他们可以被想象成实在主进程或者“主线程”中并行运行的“迷你进程”。

线程有开始顺序执行结束三部分。它有一个自己的指令指针,记录自己运行到什么地方。线程的运行可能被占用(中断),或者暂时的被挂起(睡眠),让其他的线程运行,这叫做让步。一个进程中的各个线程之间共享同一片数据空间,所以线程之间可以比进程之间更加方便的共享数据以及相互通讯。

线程一般都是并发执行的。正式由于这种并发和数据共享的机制使得多个任务合作变为可能。实际上,在单CPU的系统中,真正的并发是不可能的,每个线程会被安排成每次只运行一小会儿,然后就把CPU让出来,让其他的线程去运行。在进程的整个运行过程中,每个线程都只做自己的事,在需要的时候跟其他的线程共享运行的结果。

当然,这样的共享并不是完全没有风险的。如果多个线程共同访问同一片数据,则由于数据访问的顺序不一样,有可能导致数据结果的不一致的问题,这叫做竞态条件(race condition)。幸运的是,大多数的线程库都带有一系列的同步原语,来控制线程的执行和数据的访问。

另一个要注意的地方时,由于函数会在完成之前阻塞住,在没有特别为多线程做修改的情况下,这种“贪婪”的函数会让CPU的时间分配有所倾斜,导致各个线程分配到的时间可能不尽相同,不尽公平。【1】

具体的关于线程和进程,可以参考《现代操作系统》第二章。

接下来一段时间会详细的记录关于线程和进程的相关知识点。

参考文献:

【1】Python核心编程(第二版)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值