zoukankan      html  css  js  c++  java
  • python线程和进程

    线程:计算机能够进行调度的最小单位

    一个进程可以包含多个线程,线程共享进程资源

    多线程并发

    上下文

    进程就像一个工作的房间(内存)以及房间里工作需要的资源(I/O啊,网卡啊),线程相当于工作的人

    所有的在同一个进程中的线程是共享一块内存空间

    pid(唯一的进程标识符)

    Each process is started with a single thread,often called the primary thread, but can create  additional threads from any of its thread

    进程是通过线程来运行的

    一个线程可以控制和操作同一进程里的其他线程,但是进程只能操作子进程

    对主线程的修改会影响到其他线程,修改一个主进程不会影响到其子进程

    进程拥有自己独立的堆和栈,既不共享堆,亦不共享栈,进程由操作系统调度。

    线程拥有自己独立的栈和共享的堆,共享堆,不共享栈,线程亦由操作系统调度(标准线程是的)。

    协程和线程一样共享堆,不共享栈,协程由程序员在协程的代码里显示调度。

    进程和其他两个的区别还是很明显的。

    协程和线程的区别是:协程避免了无意义的调度,由此可以提高性能,但也因此,程序员必须自己承担调度的责任,同时,协程也失去了标准线程使用多CPU的能力。

    打个比方吧,假设有一个操作系统,是单核的,系统上没有其他的程序需要运行,有两个线程 A 和 B ,A 和 B 在单独运行时都需要 10 秒来完成自己的任务,而且任务都是运算操作,A B 之间也没有竞争和共享数据的问题。现在 A B 两个线程并行,操作系统会不停的在 A B 两个线程之间切换,达到一种伪并行的效果,假设切换的频率是每秒一次,切换的成本是 0.1 秒(主要是栈切换),总共需要 20 + 19 * 0.1 = 21.9 秒。如果使用协程的方式,可以先运行协程 A ,A 结束的时候让位给协程 B ,只发生一次切换,总时间是 20 + 1 * 0.1 = 20.1 秒。如果系统是双核的,而且线程是标准线程,那么 A B 两个线程就可以真并行,总时间只需要 10 秒,而协程的方案仍然需要 20.1 秒。

  • 相关阅读:
    1058 A+B in Hogwarts (20)
    1046 Shortest Distance (20)
    1061 Dating (20)
    1041 Be Unique (20)
    1015 Reversible Primes (20)(20 分)
    pat 1027 Colors in Mars (20)
    PAT 1008 Elevator (20)
    操作系统 死锁
    Ajax的get方式传值 避免& 与= 号
    让IE浏览器支持CSS3表现
  • 原文地址:https://www.cnblogs.com/gsx-600r/p/9886554.html
Copyright © 2011-2022 走看看