从Erlang进程看协程思想】的更多相关文章

从Erlang进程看协程思想 多核慢慢火了以后,协程类编程也开始越来越火了.比较有代表性的有Go的goroutine.Erlang的Erlang进程.Scala的actor.windows下的fibre(纤程)等,一些动态语言像Python.Ruby.Lua也慢慢支持协程. 其实我们听过协程相关很多名词,下面大致来解释一下: OS进程: 进程是资源管理的最小单元,包括进程控制块(PCB).程序段.数据段 OS线程: 线程是程序执行的最小单元,由线程ID,当前指令指针(PC),寄存器集合和堆栈组成…
本文内容 进程 线程 协程 Go 中的 goroutine 参考资料 最近,看一些文章,提到"协程"的概念,心想,进程,线程,协程,前两个很容易,任何一本关于操作系统的书都有说,开发时也经常用,但是协程呢?之前也遇到这个词,但是今天,查了一下资料.下面是一个人的总结. 电话面试被问到go的协程--虽然用 python 时候在 Eurasia 和 eventlet 里了解过协程,但自己对协程的概念也就是轻量级线程,还有一个很通俗的红绿灯说法:线程要守规则,协程看到红灯但是没有车仍可以通行…
进程.线程.轻量级进程.协程和go中的Goroutine 那些事儿电话面试被问到go的协程,曾经的军伟也问到过我协程.虽然用python时候在Eurasia和eventlet里了解过协程,但自己对协程的概念也就是轻量级线程,还有一个很通俗的红绿灯说法:线程要守规则,协程看到红灯但是没有车仍可以通行.现在总结各个资料,从个人理解上说明下 进程 线程 轻量级进程 协程 go中的goroutine 那些事儿. 一.进程 操作系统中最核心的概念是进程,分布式系统中最重要的问题是进程间通信. 进程是"程序…
转自  http://wangzhezhe.github.io/blog/2016/02/17/golang-scheduler/ 基本上是网上相关文章的梳理,初衷主要是想了解下golang中的goroutine到底是怎么回事,以及相关的起源和概念.后来发现本质上应该是对于golang scheduler的理解,因为goroutine是golang scheduler实现的一个重要模块.这一篇入门吧,基本理解到还行,如果想深入细致了解还是应该看源码,就像参考的那些比较好的链接中的那样. 补充 同…
本文内容 进程 线程 协程 Go 中的 goroutine 参考资料 最近,看一些文章,提到“协程”的概念,心想,进程,线程,协程,前两个很容易,任何一本关于操作系统的书都有说,开发时也经常用,但是协程呢?之前也遇到这个词,但是今天,查了一下资料.下面是一个人的总结. 迁移到:http://www.bdata-cap.com/newsinfo/1713872.html 电话面试被问到go的协程……虽然用 python 时候在 Eurasia 和 eventlet 里了解过协程,但自己对协程的概念…
python之线程.进程和协程 目录: 引言 一.线程 1.1 普通的多线程 1.2 自定义线程类 1.3 线程锁 1.3.1 未使用锁 1.3.2 普通锁Lock和RLock 1.3.3 信号量(Semaphore) 1.3.4 事件(Event) 1.3.5 条件(condition) 1.3 全局解释器锁(GIL) 1.4 定时器(Timer) 1.5 队列 1.5.1 Queue:先进先出队列 1.5.2 LifoQueue:后进先出队列 1.5.3 PriorityQueue:优先级队…
内容目录: 线程 基本使用 线程锁 自定义线程池 进程 基本使用 进程锁 进程数据共享 进程池 协程 线程 线程使用的两种方式,一种为我们直接调用thread模块上的方法,另一种我们自定义方式 方式一(常规使用): import threading def f1(arg): print(arg) t = threading.Thread(target=f1,args=(123,)) t.start() 通过上面的例子我们来了解下该线程执行过程,在执行t.start()时,该进程处于等待状态,然后…
进程  一.基本概念 进程是系统资源分配的最小单位, 程序隔离的边界系统由一个个进程(程序)组成.一般情况下,包括文本区域(text region).数据区域(data region)和堆栈(stack region) 文本区域存储处理器执行的代码 数据区域存储变量和进程执行期间使用的动态分配的内存: 堆栈区域存储着活动过程调用的指令和本地变量. 因此进程的创建和销毁都是相对于系统资源,所以是一种比较昂贵的操作. 进程有三个状态: 就绪态:运行条件都已满足,等待系统分配处理器以便运行. 执行态:…
1 引言 并发.并行.串行.同步.异步.阻塞.非阻塞.进程.线程.协程是并发编程中的常见概念,相似却也有却不尽相同,令人头痛,这一篇博文中我们来区分一下这些概念. 2 并发与并行 在解释并发与并行之前,我们必须先明确:单个处理器(一个单核CPU)在某一个时刻只能处理一个线程. 并发是指在同一个处理器上通过时间片轮转的方式在多个线程之间频繁切换,由于切换速度极快,所以看似多个线程似乎被同时执行,但实际上每一个时刻都只有一个线程被执行,其他的线程出于阻塞状态. 并行是指多个处理器在同一时刻同时处理了…
1.使用select模拟socketserver伪并发处理客户端请求,代码如下: import socket import select sk = socket.socket() sk.bind(('127.0.0.1', 9999,)) sk.listen(5) inputs = [sk,] outputs = [] messages = {} # del messages[白宇] # messages = { # 白宇:[消息1,消息2,] # 吴文煜:[消息1,消息2,] # } whil…
上节内容,简单的介绍了线程和进程,并且介绍了Python中的GIL机制.本节详细介绍线程.进程以及协程的概念及实现. 线程 基本使用 方法1: 创建一个threading.Thread对象,在它的初始化函数(__init__)中将可调用对象作为参数传入 import threading import time def worker(): time.sleep() print("test") ): t = threading.Thread(target=worker) t.start()…
python自动化开发学习 进程, 线程, 协程   前言 在过去单核CPU也可以执行多任务,操作系统轮流让各个任务交替执行,任务1执行0.01秒,切换任务2,任务2执行0.01秒,在切换到任务3,这样反复执行下去,表面上看每个任务都是交替执行的,但是由于CPU速度太快,让我们觉得所有任务是在同时执行一样.真正的并行执行多任务只能在多核CPU上,但是由于任务数量远远多于CPU的核心数量,所以,操作系统也会自动把多任务轮流调度到每个核心上运行. 多任务的实现有三种方式: 多进程模式 多线程模式 多…
引言 线程 创建普通多线程 线程锁 互斥锁 信号量 事件 条件锁 定时器 全局解释器锁 队列 Queue:先进先出队列 LifoQueue:后进先出队列 PriorityQueue:优先级队列 deque:双向队列 生产者消费者模型 线程池 进程 协程 引言 在学习过socket和socketserver后,我们了解到socketserver可以支持IO多路复用.在定义socketserver服务端的时候一般会使用: server = socketserver.ThreadingTCPServe…
本文基本内容 多道技术 进程 线程 协程 并发 多线程 多进程 线程池 进程池 GIL锁 互斥锁 网络IO 同步 异步等 实现高并发的几种方式 协程:单线程实现并发 一 多道技术 产生背景 所有程序串行 导致资源浪费 多道技术的目的就是让多个程序并发执行 同时处理多个任务 提高计算机效率 1.1 空间复用 时间复用 空间复用 指的是 同一时间 内存中加载多个不同程序数据, 每个进程间内存区域相互隔离,物理层面的隔离 时间复用 切换+保存 切换条件 1 一个进程执行过程中遇到了IO操作 切换到其他…
本章内容 线程 进程 协程 线程是最小的调度单位 进程是最小的管理单元 线程 多线程的特点: 线程的并发是利用cpu上下文切换 多线程的执行的顺序是无序的 多线程共享全局变量 线程是继承在进程里的,没有进程就没有线程 GIL全局解释器锁 只有在进行耗时的IO操作的时候,能释放GIL,所以只要在IO密集型的代码里,用多线程就很合适 多线程的好处 达到充分利用CPU的目的.多线程完成cpu内核的快速切换,提高CPU的利用率 多线程可以防止数据阻塞问题,多条线程同时运行,哪怕一条线程的代码执行读取数据…
Python之路[第七篇]:线程.进程和协程   Python线程 Threading用于提供线程相关的操作,线程是应用程序中工作的最小单元. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 #!/usr/bin/env python # -*- coding:utf-8 -*- import threading import time    def show(arg):     time.sleep(1)     print 'thread'+str(arg)    for …
1.python的多线程 多线程就是在同一时刻执行多个不同的程序,然而python中的多线程并不能真正的实现并行,这是由于cpython解释器中的GIL(全局解释器锁)捣的鬼,这把锁保证了同一时刻只有一个线程被执行. 多线程的特点: 线程比进程更轻量级,创建一个线程要比创建一个进程快10-100倍. 线程共享全局变量. 由于GIL的原因,当一个线程遇到IO操作时,会切换到另一个线程,所以线程适合IO密集型操作. 在多核cpu系统中,最大限度的利用多核,可以开启多个线程,开销比进程小的多,但是这并…
Python 线程和进程和协程总结 线程和进程和协程 进程 进程是程序执行时的一个实例,是担当分配系统资源(CPU时间.内存等)的基本单位: 进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响: 进程间可以通过信号.信号量.共享内存.管道.队列等来进行通信: 进程创建.销毁.上下文切换带来的开销成本都很大: 线程 线程是进程的一个实体,作为独立运行和独立调度的基本单位. 线程可与同属一个进程的其他的线程共享进程所拥有的全部资源. 线程只是一个进程中的不同执行路径,没有单独的…
单线程.多线程之间.进程之间.协程之间很多时候需要协同完成工作,这个时候它们需要进行通讯.或者说为了解耦,普遍采用Queue,生产消费模式. 系列文章 python并发编程之threading线程(一) python并发编程之multiprocessing进程(二) python并发编程之asyncio协程(三) python并发编程之gevent协程(四) python并发编程之Queue线程.进程.协程通信(五) python并发编程之进程.线程.协程的调度原理(六) 同步deque和多线程…
参考博客: 线程.进程.协程: http://www.cnblogs.com/wupeiqi/articles/5040827.html http://www.cnblogs.com/alex3714/articles/5230609.html IO多路复用: http://www.cnblogs.com/wupeiqi/articles/5040823.html 课堂笔记: - 线程进程介绍 1. 工作最小单元是线程 2. 应用程序 -> 至少有一个进程 -> 至少有一个线程 3. 应用场景…
浅谈 Python 多线程.进程.协程上手体验 前言:浅谈 Python 很多人都认为 Python 的多线程是垃圾(GIL 说这锅甩不掉啊~):本章节主要给你体验下 Python 的两个库 Threading Multiprocessing Gevent 一.线程 Threading Threading 模块建立在 _thread 模块之上._thread 模块以低级.原始的方式来处理和控制线程,而 threading 模块通过对 thread 进行二次封装,提供了更方便的 api 来处理线程…
Python 进程线程协程 GIL 闭包 与高阶函数(五) 1 GIL线程全局锁 ​ 线程全局锁(Global Interpreter Lock),即Python为了保证线程安全而采取的独立线程运行的限制,说白了就是一个核只能在同一时间运行一个线程.对于io密集型任务,python的多线程起到作用,但对于cpu密集型任务,python的多线程几乎占不到任何优势,还有可能因为争夺资源而变慢. 在分析线程全局锁之前我们先聊下python. (1) python语言的症结 ​ python是解释型语言…
上一篇文章介绍了:创建线程的两种方式.Event对象判断线程是否启动.利用信号量控制线程并发. 博客链接:线程.进程.协程和GIL(二) 这一篇来说说线程间通信的那些事儿: 一个线程向另一个线程发送数据最安全的方式就是使用queue库中的队列了,通过创建一个供多个线程共享的Queue对象,这些线程使用put()和get()操作来向队列中添加数据或者从队列中取出数据,以达到线程间通信的效果. queue队列基本方法: queue.Queue(maxsize = num):  FIFO  先进先出队…
参考链接:https://www.cnblogs.com/alex3714/articles/5230609.html https://www.cnblogs.com/work115/p/5620272.html 编程离不开并发,而并发的基础就离不开线程.进程.协程.那么什么是线程.进程.协程呢? 进程: 进程是对资源进行分配和调度的最小单位,是操作系统结构的基础,是线程的容器(就像是一幢房子,一个空壳子,并不能运动). 线程的概念主要有两点: 1.进程是一个实体,每个进程都有自己的地址空间,一…
原文:http://www.cnblogs.com/shenguanpu/archive/2013/05/05/3060616.html 电话面试被问到go的协程,曾经的军伟也问到过我协程.虽然用python时候在Eurasia和eventlet里了解过协程,但自己对协程的概念也就是轻量级线程,还有一个很通俗的红绿灯说法:线程要守规则,协程看到红灯但是没有车仍可以通行.现在总结各个资料,从个人理解上说明下 进程 线程 轻量级进程 协程 go中的goroutine 那些事儿. 一.进程 操作系统中…
0. 什么是线程(thread)? 线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元.一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成. 另外,线程是进程中的一个实体,是被CPU独立调度和分派的基本单位,线程自己不独立拥有系统资源,但它可与同属一个进程的其它线程共享该进程所拥有的全部资源. 一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行.由于线程之间的相互制约,致使线程在运行中呈现出间断性.线程也有就…
python提供了两个模块来实现多线程thread 和threading ,thread 有一些缺点,在threading 得到了弥补,为了不浪费时间,所以我们直接学习threading 就可以了. Threading用于提供线程相关的操作,线程是应用程序中工作的最小单元. #!/usr/bin/env python # -*- coding:utf-8 -*- import threading import time def show(arg): time.sleep(1) print 'th…
一.线程 线程是操作系统能够进行运算调度的最小单位.它被包含在进程之中,是进程中的实际运作单位.一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务 1.threading模块 线程创建有2种方式:如下 直接调用 import threading,time def run(n): print("test...",n) time.sleep(2) if __name__ == '__main__': t1 = threading.Thread(…
进程 && 线程 进程:是内存中的一个独立的句柄,我们可以理解为一个应用程序在内存中就是一个进程. 各个进程之间是内存相互独立,不可共享的 线程:每个应用运行之后就会对应启动一个主线程,通过主线程可以创建多个字线程,各个线程共享主进程的内存空间. 关于线程.进程的解释有一篇有趣而生动的解释(http://www.ruanyifeng.com/blog/2013/04/processes_and_threads.html) 默认应用程序:是单进程.单线程的. 进程是资源分配的最小单位.与程序…
进程和线程 既然看到这一章,那么你肯定知道现在的系统都是支持“多任务”的操作,比如: Mac OS X,UNIX,Linux,Windows等. 多任务:简单地说就是同时运行多个任务.譬如:你可以一边看小电影,一边用word写感受,在一边录制,这就是多任务,至少同时有3个任务正在运行.还有很多任务在后台运行,只是桌面上没有显示而已. 现在,多核CPU已经很普遍了,但是,即使在过去单核的时代,也是可以执行多任务的.由于CPU执行代码都是顺序执行的,那么单核CPU是怎么执行多任务的呢?答案就是:操作…