zoukankan      html  css  js  c++  java
  • 进程 线程 协程

    进程 线程 协程

    进程

    进程的出现是为了让计算机去是充分的利用CPU资源,如果计算机没有进程的话,两个任务就会顺序执行,不能实现”调度算法“,就是在任务A读取数据的时候,任务B使用计算资源,当A读取完数据后,再切换到任务A执行。并通过进程的调度。来实现上下文切换,所以,进程是系统资源分配的最小单位,进程是由进程控制块程序段、数据段三部分组成。 进程之间可以通过管道,有名管道,信号量,消息队列,信号,共享内存,套接字来进行通信。

    线程

    线程的出现是为了降低上下文切换的消耗,提高系统的并发性,使进程内的并发成为可能,突破一个进程只能干一件事的缺陷。若多个进程,每个进程各自负责性质一样的任务,那么每个任务之间的协作就涉及到了进程间通信的问题,对于共同需要的资源,进程间要不停的切换,这在性能上又很大的损失,线程就是为了解决这个问题而产生的,用共享内存来实现通信。需要所以线程共享进程的大部分资源,线程也有自己的资源比如栈,寄存器等等。

    协程

    golang里面的Gorotines其实就是协程,协程可以看成很低配的线程,一个线程最小是1M,但是一个协程只要2K,这使得在Go可以运行起成千上万个协程,而且不需要程序员去管理这些协程,他们的大小是会自己适应变化的。当涉及到大规模的并发连接时,比如10K的连接,使用线程作为处理单位,系统调度开销还是过大,当这个时候就又陷到了跟进程上下文切换的资源开销问题,所以Go的并发思想是:用通信实现内存共享,而不是用内存共享实现通信,所以就有了Golang的channel

    但是也不是说用协程就一定比线程快,CPU密集型应用适合使用多线程,(CPU一直在利用着,切换反而会造成性能损失)而IO密集型应用适合使用多协程。

  • 相关阅读:
    zabbix:以主动模式添加一台受监控主机 (zabbix5.0)
    linux(centos8):用grep命令查找文件内容
    zabbix安装中文语言包及中文乱码的解决(zabbix5.0)
    性能测试常用术语
    Java 读写Properties配置文件
    携程Apollo配置中心架构深度剖析
    jmeter 使用csv文件 注意项
    CnPlugin_1.5.1 解决win10 pl/sql 输入法卡顿 兼容性问题
    jmeter(psot) 表单提交 注意项
    全新OCR3500数据
  • 原文地址:https://www.cnblogs.com/Jun10ng/p/12616342.html
Copyright © 2011-2022 走看看