进程线程协程

1.进程

我们电脑的应用程序,都是进程,假设我们用的电脑是单核的,cpu同时只能执行一个进程。当程序处于I/O阻塞的时候,CPU如果和程序一起等待,那就太浪费了,cpu会去执行其他的程序,此时就涉及到切换,切换前要保存上一个程序运行的状态,才能恢复,所以就需要有个东西来记录这个东西,就可以引出进程的概念了。

进程就是一个程序在一个数据集上的一次动态执行过程。进程由程序,数据集,进程控制块三部分组成。程序用来描述进程哪些功能以及如何完成;数据集是程序执行过程中所使用的资源;进程控制块用来保存程序运行的状态。进程间切换非常消耗系统资源,进程间通信有两种方式,队列和管道, 进程池的作用是维护一个最大的进程量,如果超出设置的最大值,程序就会阻塞,知道有可用的进程为止。每个进程都有自己的独立内存空间。

QQ要以一个整体形式暴露给操作系统管理,里面包含各种资源的调用,内存,对各种资源管理的集合,就可以成为进程,

进程,要操作cpu,必须先创建一个线程

cpu》ram(内存)》硬盘,每个程序内存是独立的,可以单独访问

多少个线程,多少个cpu,Python在执行的时候回只允许一个线程运行

2.线程

一堆指令的集合

一个进程中可以开多个线程,为什么要有进程,而不做成线程呢?因为一个程序中,线程共享一套数据,如果都做成进程,每个进程独占一块内存,那这套数据就要复制好几份给每个程序,不合理,所以有了线程。

线程又叫轻量级进程,是一个基本的cpu执行单元,也是程序执行过程中的最小单元。一个进程最少也会有一个主线程,在主线程中通过threading模块,在开子线程。Linux中线程的调度由操作系统控制。

查看 一个进程有多少个线程: cat /proc/pid/status    查看Threads

3.进程线程的关系

(1)一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程

(2)资源分配给进程,进程是程序的主体,同一进程的所有线程共享该进程的所有资源,多个线程共享内存

(3)cpu分配给线程,即真正在cpu上运行的是线程。

(4)线程是最小的执行单元,进程是最小的资源管理单元,线程执行开销小,但不利于管理与保护,进程相反

4、协程

一个程序可以包含多个协程,可以对比与一个进程包含多个线程,因而下面我们来比较协程和线程。我们知道多个线程相对独立,有自己的上下文,切换受系统控制;而协程也相对独立,有自己的上下文,但是其切换由自己控制,由当前协程切换到其他协程由当前协程来控制,协程经过了封装。从技术的角度来说,“协程就是你可以暂停执行的函数”

线程包含于进程,协程包含于线程。只要内存足够,一个线程中可以有任意多个协程,但某一时刻只能有一个协程在运行,多个协程分享该线程分配到的计算机资源。协程的调度由所在程序自身控制

5.进程与线程的选择取决以下几点:

1、需要频繁创建销毁的优先使用线程;因为对进程来说创建和销毁一个进程代价是很大的。

2、线程的切换速度快,所以在需要大量计算,切换频繁时用线程,还有耗时的操作使用线程可提高应用程序的响应

3、因为对CPU系统的效率使用上线程更占优,所以可能要发展到多机分布的用进程,多核分布用线程

4、并行操作时使用线程,如C/S架构的服务器端并发线程响应用户的请求;

5、需要更稳定安全时,适合选择进程;需要速度时,选择线程更好。

6.线程进程都是同步机制,而协程则是异步

线程(频繁创建销毁切换,多核分布,并行操作,速度

进程(稳定安全多机分布

6进程间通信

进程间通信(IPC,Interprocess communication)是一组编程接口,让程序员能够协调不同的进程,使之能在一个操作系统里同时运行,并相互传递、交换信息。这使得一个程序能够在同一时间里处理许多用户的要求。因为即使只有一个用户发出要求,也可能导致一个操作系统中多个进程的运行,进程之间必须互相通话。IPC接口就提供了这种可能性。每个IPC方法均有它自己的优点和局限性,一般,对于单个程序而言使用所有的IPC方法是不常见的。
  
  IPC方法包括管道(PIPE)、消息排队、共用内存以及套接字(Socket)

①管道包括三种:

1)普通管道PIPE, 通常有两种限制,一是单工,只能单向传输;二是只能在父子或者兄弟进程间使用.

2)流管道s_pipe: 去除了第一种限制,为半双工,可以双向传输.

3)命名管道:name_pipe, 去除了第二种限制,可以在许多并不相关的进程之间进行通讯.

②Message Queues(消息队列)

消息队列就是消息的一个链表,它允许一个或多个进程向它写消息,一个或多个进程从中读消息,是双向的

1python提供了多种进程通信的方式,主要Queue和Pipe,队列和管道,队列用于多个进程间实现通信,管道是两个进程的通信

队列有两个方法:

put方法:以插入数据到队列中,他还有两个可选参数:blocked,timeout

Get:从队列读取并且删除一个元素

7上下文切换

①概念

一个线程被剥夺处理器的使用权而被暂停运行,就是切出

一个线程被选中占用处理器开始或继续运行,就是切入

这种切入切出的过程,操作系统需要保存和恢复相应的进度,这个进度信息就是上下文。

②原因

CPU 时间片是 CPU 分配给每个线程执行的时间段,当一个线程的时间片用完了,

线程五种状态:

新建new,就绪runnable,运行running,阻塞blocked,死亡dead

调用以下关键字:sleep,wait,yield,join,park,synchronized,lock引发自发性上下文切换

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值