- GIL global interpreter lock (cpython) 全局解释器
- python 中的一个线程对应于C 语言中的一个线程
- gil 使得同一个时刻只有一个线程在一个CPU 上执行字节码,无法将多个线程映射到多个CPU 上执行
- GIL会根据执行的字节码行数以及时间片释放GIL ,GIL 在遇到IO 操作时主动释放
- 并发并行
- 并发:
- 一个时间段内,有几个程序同时在一个CPU 上运行,但是任意时刻只有一个程序在CPU 上运行
- 并行
- 任意时间点上,有多个程序同运行在多个CPU 上,并行数与CPU 数一致
- 并发:
- 同步异步
- 同步
- 同步是指代码调用IO操作时,必须等待IO操作完成才返回的调用方式
- 异步
- 异步是指代码调用IO 操作时,不必等IO 操作完成就返回的调用 方式
- 同步
- 阻塞、非阻塞
- 阻塞是指调用函数时后当前线程被挂起
- 非阻塞是指调用函数时候在当前线程不会被挂起,而是立即返回
- Unix下五种I/O 模型
- 阻塞式I/O
- 非阻塞式I/O
- I/O 复用
- 信号驱动式I/O
- 异步i/o(POSIX的aio系列函数)
- 阻塞式I/O
- select、pool、epoll
- select、poll\epoll 都是IO 多路复用的机制。I/O 多路复用就是通过一种机制,一个进程可以监控多个描述符,一旦某个描述符就绪(一般是都就绪或者写就绪),能够通知程序 进行相应的读写操作,但select,poll,epoll 本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的,而异步I/O 则无需自己负责进行读写,异步I/O的实现会负责把数据从内核拷贝到用户空间
- select
-
- poll
- epoll
-
#1. epoll 并不一定比select好
#在并发高的情况下,连接活跃度不是很高,epoll 比select 好
#并发不高,同时连接很活跃,select 比epoll 好
-
- C10M问题
- 如何利用8核CPU 64G 内存,在10gbps 的网络上保持1000万并发连接
-
什么是协程
- 解决问题
- 回调模式编码复杂度高
- 同步编程的并发性不高
- 多线程编程需要线程同步,lock
- 方法
- 采用同步的方式去编写异步的代码
- 采用单线程去切换任务
- 线程是由操作系统切换 的,单线程以为着我们需要程序员自己去调度任务
- 不再需要锁,并发性高,如果单线程内切换函数,性能远高于线程切换,并发性高
- 包含各种 特定系统实现的模块化事件循环
- 输出和协议抽象
- 对 tcp 、UDP、SSL、子进程,延时调用以及其他的具体支持
- 模仿futures模块但适用于事件循环使用的Future类
- 基于yield from 的协议和任务,可以让你用顺序的方式编写并发代码
- 必须使用一个将产生阻塞IO 的调用时,有接口可以把这个事件转移到线程池
- 模仿threading 模块中的同步原语、可以用在单线程内的协程之间
- 解决问题
- q
-
-
线程进程协程并发
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
上一篇:5. 线程有多少种实现方式?
下一篇:7进程和线程
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
Python中多线程、进程与协程编程
本文给出Python中多线程、进程与协程编程各自使用场景及使用基本思路总结。
Python 多线程 事件循环 多进程 协程 -
go创建指定数量的协程进行并发任务
go使用chan waitGroup等实现指定数量的协程来跑并发任务
Go Group 高并发 -
进程,线程,协程
协程不是线程,不要混为一谈。
unity 协程 -
进程、线程、纤程、协程
进程、线程、纤程、协程的区别进程:进程 是 OS 分配资源的基本单位。
进程 线程 纤程 协程 用户空间 -
进程/线程/协程(二、进程)
前面吹水了一节,这次来一点干货把,争取一篇搞定。
进程 进程函数 进程特性 子进程 父进程