将多个ULT映射到一个KLT 。线程管理在用户空间中进行,效率较高 。虽然它能创建很多ULT,但内核一次只能调度一个线程执行,因此,并发性得不到保障 。
(3)多对多模型
将多个ULT映射到同样数量或较少数量的KLT 。它很好地解决了上面出现的问题,能够创建需要的线程,并且内核也能并行执行这些线程 。
协程的定义
协程,又称微线程,纤程 。英文名Coroutine,是一种用户态的轻量级线程 。
程序,或者称为函数,在所有语言中都是层级调用,比如A调用B,B在执行过程中又调用了C,C执行完毕返回,B执行完毕返回,最后是A执行完毕 。
所以子程序调用是通过栈实现的,一个线程就是执行一个子程序 。子程序调用总是一个入口,一次返回,调用顺序是明确的 。
而协程的调用和子程序不同 。
线程是系统级别的它们由操作系统调度,而协程则是程序级别的由程序根据需要自己调度 。
【进程、线程、协程介绍】在一个线程中会有很多函数,我们把这些函数称为子程序,在子程序执行过程中可以中断去执行别的子程序,而别的子程序也可以中断回来继续执行之前的子程序,这个过程就称为协程 。
也就是说在同一线程内一段代码在执行过程中会中断然后跳转执行别的代码,接着在之前中断的地方继续开始执行 。
协程的优点:
(1)无需线程上下文切换的开销,协程避免了无意义的调度,由此可以提高性能(但也因此,程序员必须自己承担调度的责任,同时,协程也失去了标准线程使用多CPU的能力);
(2)无需原子操作锁定及同步的开销;
(3)方便切换控制流,简化编程模型;
(4)高并发+高扩展性+低成本:一个CPU支持上万的协程都不是问题 。所以很适合用于高并发处理 。
协程的缺点:
(1)无法利用多核资源:协程的本质是个单线程,它不能同时将单个CPU的多个核用上,协程需要和进程配合才能运行在多CPU上 。当然我们日常所编写的绝大部分应用都没有这个必要,除非是cpu密集型应用 。
(2)进行阻塞(Blocking)操作(如IO时)会阻塞掉整个程序 。
推荐阅读
- 被隔离没钱交费怎么办?
- 单线程性能秒杀多线程!多路复用IO实现高性能网络服务
- Linux 查看进程的动态信息
- 取代H.265/HEVC!H.266编解码标准发布:视频清晰度不变、数据量减半
- 素食的八大好处!看看科学怎么说
- 久用电脑眼睛干涩 就吃这七种果蔬
- 红茶、绿茶、乌龙茶各用什么茶具泡茶?[红茶]
- 红茶含硒吗?[红茶]
- 老电脑升级加固态硬盘还是内存、CPU、显卡?旧电脑升级硬件建议
- 轻薄、办公、高性能,这四款笔记本满足学生党所有需求