美文网首页
单线程---多线程

单线程---多线程

作者: BaiBao丶 | 来源:发表于2018-10-10 19:42 被阅读0次

一、从操作系统角度

操作系统处理任务,

调度单位是进程和线程。

1.进程:

表示一个程序的执行活动

(打开程序、读写程序数据、关闭程序)

2.线程:

执行某个程序时,

该进程调度的最小执行单位

(执行功能1,执行功能2)

一个程序至少有一个进程
一个进程至少有一个线程
1.并行:
需要处理的任务数 == CPU核心数量

两个任务

两个核心

任务1:-------------

任务2:-------------

2.并发:

需要处理的任务数 > CPU核心数量

三个任务

一个核心

任务1: ----- ------

任务2: ------

任务3: ------

二、从程序角度

多进程和多线程

表示:当前程序可以同时执行多个任务

进程和线程都是由

操作系统调度完成

1.进程:

每个进程都是有自己独立的内存空间,不同进* 程之间的内存空间是不能共享。
不同进程之间的通信是由操作系统来完成的。
不同进程之间的通信效率低切换开销也大。
2.线程:

一个进程下可以有多个线程,同一个进程内的* 线程可以共享内存空间.
不同线程之间的通信 有进程 管理。
不同线程之间的通信效率高,切换开销小。
3.互斥锁:

共享意味着多个线程的竞争

会导致不安全问题。

为了保护内存空间的数据不被多个线程同时读写,

导致数据隐患,

于是诞生了"互斥锁"。

"互斥锁":

一种安全有序的让多个线程访问进程内存空间的机制。

当一个线程在访问进程内存空间时,

互斥锁可以防止其他线程访问

解释型语言:执行程序时,解释器按行执行程序内容,执行时检查问题。

编译型语言:通过编译器将程序编译为一个可执行文件,执行前检查问题。

三、Python中的多线程:

GIL(全局解释器锁):

同一时刻只能有一个线程在运行。

坏处:

多线程不能充分利用多核CPU资源。

好处:

从根本上杜绝了多线程访问内存空间的安全问题。

Python的多线程不适合并行,

但非常适合并发。

Python的多线程在遇到 IO阻塞函数执行,

会自动释放GIL,

让后面的线程执行任务。

如果没有 IO 操作,

那么解释器会每隔100次操作后,

强制释放GIL,让后面的线程执行。

import sys

sys.getcheckinterval()

1.多进程:

适用于密集CPU任务,

可以充分调度CPU资源(大量的并行运算)。

multiprocessing
缺点:不适用于需要大量数据通信和多次切换的场景,因为进程之间通信和切换成本高。
2.多线程:

适用于密集IO任务(网络IO,磁盘IO,数据库IO),

在IO阻塞时可以切换线程执行。

threading.Thread、multiprocessing.dummy
缺点:同一个CPU时间片只能执行一个任务,不能做到并行,只能做到并发。优点:线程之间切换和通信非常方便,开销小。</pre>

3.协程:

由程序员自行编写调度功能,

切换协程就好比切换一个函数,

几乎没有切换开销。

特点是在单线程上执行多个任务,

调度由程序员控制,不经过操作系统,

所以没有进程线程的切换开销,

也不需要处理锁。

gevent
monkey.patch_all()
monkey的作用是将Python底层的网络库socket、select自动打个补丁,

程序在遇到网络IO阻塞时,

可以自动切换协程工作。

相关文章

  • Java中多线程

    一、概述 1、多线程和单线程 多线程即一个程序中有多个线程在同时执行,单线程和多线程: 单线程:若有多个任务,只有...

  • 2018-11-16

    单线程和多线程区别 单线程设置变量举例${sign} 单线程设置变量举例${__property(sign)}

  • 多线程 webworker

    多线程——webWorker1、单线程与多线程区别:单线程:前一个操作没做完,后一个没办法开始多线程:可以同时进行...

  • redis知识

    redis究竟是单线程还是多线程的? redsi不仅仅是单线程的,在6.0之后启动是多线程的, 为什么是多线程的呢...

  • 同步与异步、事件循环与消息队列、微任务与宏任务

    JavaScript 是单线程、异步、非阻塞、解释型脚本语言。 单线程与多线程 单线程语言:JavaScript ...

  • 对比python的I/O密集型单线程和aysncio协程并发

    前面比较了单线程与多线程的I/O密集型,多线程访问速度远远优于单线程,今天我们再测试下单线程与协程并发访问多个网页...

  • python之单线程、多线程操作

    前言 单线程和多线程是什么自行google补脑 对于python 单线程和多线程的理解,我花了很长时间,搜索的大部...

  • 单线程多线程系统效率差别

    单线程和多线程 单线程和多线程有什么区别呢?有人说过比较形象生动的比喻,单线程就像你在地铁站刷卡,突然电话来了,你...

  • 深入浅出node-异步IO

    node在多线程和单线程之间的选择: 利用单线程,原理多线程的死锁、状态同步等问题;利用异步IO,让线程原理阻塞,...

  • 【基础】练习册55-Python3_多线程

    多线程 代码如下: #coding=utf-8#多线程:将onethreads.py单线程改为多线程并行impor...

网友评论

      本文标题:单线程---多线程

      本文链接:https://www.haomeiwen.com/subject/srymaftx.html