并行

[转载]并行与并发的区别

懵懂的女人 提交于 2019-12-01 06:19:36
[转载]并行与并发的区别 本文转载自https://laike9m.com/blog/huan-zai-yi-huo-bing-fa-he-bing-xing,61/,仅做个人学习使用,侵权请联系删除 “并发” 指的是程序的结构,“并行” 指的是程序运行时的状态 并行(parallelism) 这个概念很好理解。所谓并行,就是 同时执行 的意思,无需过度解读。判断程序是否处于并行的 状态 ,就看同一时刻是否有超过一个 “工作单位” 在运行就好了。所以, 单线程永远无法达到并行状态 。 要达到并行状态,最简单的就是利用多线程和多进程。但是 Python 的多线程由于存在著名的 GIL,无法让两个线程真正 “同时运行”,所以实际上是无法到达并行状态的。 并发(concurrency) 要理解 “并发” 这个概念,必须得清楚, 并发指的是程序的 “结构” 。当我们说这个程序是并发的,实际上,这句话应当表述成 “这个程序采用了支持并发的设计”。好,既然并发指的是人为设计的结构,那么怎样的程序结构才叫做支持并发的设计? 正确的并发设计的标准是:使多个操作可以在重叠的时间段内进行 (two tasks can start, run, and complete in overlapping time periods) 。 这句话的重点有两个。我们先看 “(操作)在重叠的时间段内进行” 这个概念

Python 并行分布式框架:Celery

末鹿安然 提交于 2019-11-29 23:50:44
Celery (芹菜)是基于Python开发的分布式任务队列。它支持使用任务队列的方式在分布的机器/进程/线程上执行任务调度。 一、架构设计 Celery的架构由三部分组成,消息中间件(message broker),任务执行单元(worker)和任务执行结果存储(task result store)组成。 消息中间件 Celery本身不提供消息服务,但是可以方便的和第三方提供的消息中间件集成。包括, RabbitMQ , Redis , MongoDB (experimental), Amazon SQS (experimental), CouchDB (experimental), SQLAlchemy (experimental),Django ORM (experimental), IronMQ 任务执行单元 Worker是Celery提供的任务执行的单元,worker并发的运行在分布式的系统节点中。 任务结果存储 Task result store用来存储Worker执行的任务的结果,Celery支持以不同方式存储任务的结果,包括AMQP, Redis,memcached, MongoDB,SQLAlchemy, Django ORM,Apache Cassandra, IronCache 另外, Celery还支持不同的并发和序列化的手段 并发 Prefork ,