软件开发中涉及操作系统知识总结—线程、进程与协程
来源:互联网 发布:酒吧霸屏软件 编辑:程序博客网 时间:2024/05/06 09:53
软件开发中经常会涉及到多线程处理多任务,牵扯到进程与协程的一些知识。
一、理论:
1.操作系统中的进程
定义:进程是系统分配资源的单位,每一个进程对应与一个活动的程序,当进程激活时,操作系统就将系统的资源包括内存、I/O和CPU等分配给它,使它执行。
通信方式:信号量 管程 共享存储器系统 消息传递系统 管道通信
2.操作系统中的线程
定义:线程是CPU分配时间的单位,每一个线程对应于它在进程中的一个函数,也就是内存中的代码段,多个线程执行时CPU会根据它们的优先级分配时间,使它们完成自己的功能。
通信方式:互斥锁、条件变量、计数信号量、多读、单写锁
3.操作系统中协程的概念
协程,又称微线程,纤程。英文名Coroutine。
协程的概念很早就提出来了,但直到最近几年才在某些语言(如Lua)中得到广泛应用。
子程序,或者称为函数,在所有语言中都是层级调用,比如A调用B,B在执行过程中又调用了C,C执行完毕返回,B执行完毕返回,最后是A执行完毕。所以子程序调用是通过栈实现的,一个线程就是执行一个子程序。子程序调用总是一个入口,一次返回,调用顺序是明确的。
而协程的调用和子程序不同。协程看上去也是子程序,但执行过程中,在子程序内部可中断,然后转而执行别的子程序,在适当的时候再返回来接着执行。
优势:
最大的优势就是协程极高的执行效率。因为子程序切换不是线程切换,而是由程序自身控制,因此,没有线程切换的开销,和多线程比,线程数量越多,协程的性能优势就越明显。
第二大优势就是不需要多线程的锁机制,因为只有一个线程,也不存在同时写变量冲突,在协程中控制共享资源不加锁,只需要判断状态就好了,所以执行效率比多线程高很多。
协程利用多核CPU:最简单的方法是多进程+协程,既充分利用多核,又充分发挥协程的高效率,可获得极高的性能。
二、java语言中的线程、协程
1.多线程处理:
(一) Tread与Runable
1. 通过继承Thread类,重写Thread的run()方法,将线程运行的逻辑放在其中
2. 通过实现Runnable接口,实例化Thread类
(二)jdk1.5之后的并发包
2.java中的协程
java协程框架:Kilim
kilim的实现就是干了这么几个事情:
1、利用字节码增强,将普通的java代码转换为支持协程的代码。
2、在调用pausable方法的时候,如果pause了就保存当前方法栈的State,停止执行当前协程,将控制权交给调度器
3、调度器负责调度就绪的协程
4、协程resume的时候,自动恢复State,根据协程的pc计数跳转到上次执行的位置,继续执行。
框架地址:https://github.com/kilim/kilim
0 0
- 软件开发中涉及操作系统知识总结—线程、进程与协程
- 软件开发中涉及操作系统知识总结—IO模型
- 操作系统总结---------进程与线程
- 操作系统知识汇总--进程与线程
- 操作系统中任务、进程和线程总结
- 操作系统进程线程总结
- 操作系统中进程与线程关系
- 详解操作系统中进程与线程
- 进程/线程知识总结
- 操作系统--进程与线程
- 【操作系统】 进程与线程
- 操作系统 *** 进程与线程
- 操作系统--进程与线程
- [操作系统] 进程与线程
- 操作系统进程与线程
- 操作系统--进程与线程
- 【操作系统】进程与线程
- [操作系统] 进程与线程
- 生产制造追溯系统-条码打印
- Unity3D开发小贴士(十五)状态机组件
- AJax学习笔记
- 【LeetCode】 083. Remove Duplicates from Sorted List
- 北航程序设计决赛(虽然。。。。但是)补题。
- 软件开发中涉及操作系统知识总结—线程、进程与协程
- Leetcode 368. Largest Divisible Subset
- Java基本类型(一)
- 第三周练习计划
- 向SQL数据库中插入多条数据
- 移动APP漏洞自动化检测平台建设
- 初识STM32 SPI
- 射频工程师竞聘面试问题和答案(竞聘成功必备)
- 使用WireShark生成地理位置数据地图