关于进程,线程,协程,一点心得

1:进程

进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在当代面向线程设计的计算机结构中,进程是线程的容器,一个进程中至少会有一个主线程。程序是指令、数据及其组织形式的描述,进程是程序的实体。

所谓多进程,大多数下指的是多个进程,但是实质是每个进程里面运行了一个主线程,所以归根结底是一个“多线程”。这里理解的关键是所有程序的运行的基本单位是线程。

多进程请注意进程间通信。Interprocess communication

1)管道

2)系统IPC(消息队列,信号,共享内存)

3)socket

 

2:进程切换

进行进程切换就是从正在运行的进程中收回处理器,然后再使待运行进程来占用处理器。

这里所说的从某个进程收回处理器,实质上就是把进程存放在处理器的寄存器中的中间数据找个地方存起来,从而把处理器的寄存器腾出来让其他进程使用。那么被中止运行进程的中间数据存在何处好呢?当然这个地方应该是进程的私有堆栈。

让进程来占用处理器,实质上是把某个进程存放在私有堆栈中寄存器的数据(前一次本进程被中止时的中间数据)再恢复到处理器的寄存器中去,并把待运行进程的断点送入处理器的程序指针PC,于是待运行进程就开始被处理器运行了,也就是这个进程已经占有处理器的使用权了。

 

3:运行中的进程的三个状态

 

4:线程

线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。由于线程之间的相互制约,致使线程在运行中呈现出间断性。线程也有就绪、阻塞和运行三种基本状态。就绪状态是指线程具备运行的所有条件,逻辑上可以运行,在等待处理机;运行状态是指线程占有处理机正在运行;阻塞状态是指线程在等待一个事件(如某个信号量),逻辑上不可执行。每一个程序都至少有一个线程,若程序只有一个线程,那就是程序本身。

 

5:多线程

多线程(英语:multithreading),是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。

问题

大多数的计算机都是单处理器(CPU)的,为了运行所有这些线程,操作系统为每个独立线程安排一些CPU时间,操作系统以轮换方式向线程提供时间片,这就给人一种假象,好象这些线程都在同时运行。由此可见,如果两个非常活跃的线程为了抢夺对CPU的控制权,在线程切换时会消耗很多的CPU资源,反而会降低系统的性能。

这个问题的本质是:如果开启了大量的线程,即使你是多核cpu,那么也会由于对cpu时间的活跃抢夺而产生较高的cpu切换消耗。

多线程请加锁。

 

6:线程进程区别

线程和进程的区别在于,子进程和父进程有不同的代码和数据空间,而多个线程则共享数据空间,每个线程有自己的执行堆栈和程序计数器为其执行上下文.多线程主要是为了节约CPU时间,线程的运行中需要使用计算机的内存资源和CPU。

操作系统来说,线程是最小的执行单元,进程是最小的资源管理单元。

 

 

7:多线程,多进程的硬件支持

假设是一個单核单线程cpu,那么多进程,多线程的意义就在于:大多数的程序都是和资源打交道的,如读取文件,查询数据库,访问网络,这时候多进程,多线程的优势体现在让线程A先用一下CPU去查询数据库,在线程A查询数据库时,CPU是空闲的,线程B就用CPU去读取文件,线程C就用CPU去访问网络。相对于查询数据库,读取文件这些操作来说,CPU的计算时间几乎可以忽略不计。所以,多线程,在这里,实际上是计算机多种资源的并行运用。

这里本质是现代CPU 的速度(GHZ)是真滴快,现代磁盘,内存(500MHZ)的速度是真滴慢。所以多线程,多进程技术能最大化cpu的使用效率。

上面是单核单线程的情况,下面说一下多核多线程的情况。

比如你有一个双核双线程的CPU,你可以理解为你有两个大脑可以同时计算;如果你有一个双核四线程的CPU,你可以理解为你有两个大脑,但是,每个电脑都被分为了两个区域,他们之间可以并行计算,互不影响。实际的情况的双核四线程的CPU其中两个线程的效率低于另外两个线程,且他们在CPU时间分配时,会针对不同的计算任务,如核A的线程一可能擅长图形计算,核A的线程二却擅长浮点计算。

下面假设你有一个4核心的CPU。

那么多线程,多进程的模型就是将多个线程,分配到这4个CPU上,然后再如之前的单核单线程的运行一样。所以在这里,多线程多进程不仅实现了使用多个cpu的功能,也实现了之前说的计算机多种资源的并行使用。

 

8:协程

协程,首先应该理解为一个函数执行

协程不是被操作系统内核所管理,而完全是由程序所控制(也就是在用户态执行)

可以理解为多个协程,就是多个函数执行,但是这多个函数却并不是串行执行,而是存在一种机制:比如子程序A、B:

假设由协程执行,在执行A的过程中,可以随时中断,去执行B,B也可能在执行过程中中断再去执行A。所以这里可以看到其实已经有异步非阻塞的雏形了。

协程是在一个线程中执行的。

 

9:协程无法利用多核cpu

nginx的解决方式是多进程 + 协程。每一个请求先对应一个进程,再对应其中一个协程。

 

10:一点补充,虚拟内存

虚拟内存是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。目前,大多数操作系统都使用了虚拟内存,如Windows家族的“虚拟内存”;Linux的“交换空间”等。

Wiki

计算机的操作系统使用硬件和软件的组合,将程序使用的存储器地址(称为虚拟地址)映射到计算机存储器中的物理地址。 主进程存储(如进程或任务所示)显示为连续的地址空间或连续段的集合。 操作系统管理虚拟地址空间以及将实内存分配给虚拟内存。 CPU中的地址转换硬件(通常称为存储器管理单元或MMU)自动将虚拟地址转换为物理地址。 操作系统内的软件可以扩展这些功能以提供可以超过实际存储器容量的虚拟地址空间,从而可以引用比计算机中物理存在的更多的存储器。
--------------------- 
作者:ivalue2333 
来源:CSDN 
原文:https://blog.csdn.net/ivalue/article/details/81945616 
版权声明:本文为博主原创文章,转载请附上博文链接!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值