多线程不能不知道的之单线程和多线程的比较
早期的计算硬件十分复杂,但是操作系统执行的功能确十分的简单。那个时候的操作系统在任一时间点只能执行一个任务,也就是同一时间只能执行一个程序。多个任务的执行必须得轮流执行,在系统里面进行排队等候。
栗子君有话说
例子1,你正在通过你的web浏览器查看一些精彩的文章,你需要把好的文章给下载下来,可能有些非常精彩的文章你需要收藏起来,你就用你的打印机打印这些在线的文章。在这里,浏览器一边下载HTML格式的文章,一边还要打印文章。这就是一个程序同时执行多个任务,每个任务分配一个线程来完成。
例子2,大家是否有在食堂吃饭的经历,尤其是学校里面的食堂。学生有访问高峰,这就需要卖饭的大妈,身手矫健,要记下学生点的饭,之后一边做饭,一边装饭。如果生意实在太好,可以多雇人手,一起帮着卖饭。
一个食堂大妈就是进程,记菜单,做饭,装饭这些动作就是进程中线程。如果想要快速完成这些动作,食堂大妈就要在记菜单,做饭,装饭之间不停的切换,这个就是多线程。如果增加人手这个就相当于计算机增加cpu内核,他们都可以独立执行线程,这也是多线程。
线程创建原理
操作系统创建了进程后,会创建一个线程执行进程中的代码,这也就是主线程。主线程在运行过程中,可能会创建其他线程(辅助线程),这些创建的线程又可以创建其他线程,这样就使得多个线程在同一个进程中执行。每个线程都独立运行,共享进程提供的各种资源,如代码、数据、虚拟地址空间等,每个线程可以执行进程中的不同代码,进程中的同一段代码也可以由多个线程执行(可以同时被多个线程访问的代码、数据等资源就是临界资源)。
线程就是程序中的一个执行路径, 它在进程上下文中执行,有一定的生命周期。
线程是这样一种机制,它允许在程序中并发执行多个指令流,每个指令流都称为一个线程,彼此间互相独立。 线程又称为轻量级进程,它和进程一样拥有独立的执行控制,由操作系统负责调度,区别在于线程没有独立的存储空间,而是和所属进程中的其它线程共享一个存储空间,这使得线程间的通信远较进程简单。
多个线程的执行是并发的,也就是在逻辑上“同时”,而不管是否是物理上的“同时”。如果系统只有一个CPU,那么真正的“同时”是不可能的,但是由于CPU的速度非常快,用户感觉不到其中的区别,因此我们也不用关心它,只需要设想各个线程是同时执行即可。
单线程和多线程的比较
多线程和传统的单线程在程序设计上最大的区别在于,由于各个线程的控制流彼此独立,使得各个线程之间的代码是乱序执行的,由此带来的线程调度,同步等问题
单线程和多线程执行效率,有时往往是因为线程中断,多线程可以执行其他的无关的线程,提高cpu的利用率。整体来看的话,是多线程对资源的利用率高,所有才会觉得多线程执行时间比单线程短
多线程的缺点
上面说了很多基本上都是多线程带来的优点,这里说点它的缺点。如果一个程序有很多的线程,那么其他程序的线程必然只能占用更少的CPU时间;而且大量的CPU时间是用于线程调度的;操作系统也需要足够的内存空间来维护每个线程的上下文信息;因此,大量的线程会降低系统的运行效率。
关于多线程这一块还得再写个demo,后面会分享,欢迎大家阅读!
多线程不能不知道的之单线程和多线程的比较相关推荐
- 关于多线程编程您不知道的 5 件事 有关高性能线程处理的微妙之处
虽然很少有 Java™ 开发人员能够忽视多线程编程和支持它的 Java 平台库,更少有人有时间深入研究线程.相反地,我们临时学习线程,在需要时向我们的工具箱添加新的技巧和技术.以这种方式构建和运行适当 ...
- 单线程和多线程的优缺点(转)
多线程处理的优点 同步应用程序的开发比较容易,但由于需要在上一个任务完成后才能开始新的任务,所以其效率通常比多线程应用程序低.如果完成同步任务所用的时间比预计时间长,应用程序可能会不响应.多线程处理可 ...
- Problem 58 怎样判断当前程序链接的是多线程版的Glibc还是单线程版的Glibc?
Problem58 怎样判断当前程序链接的是多线程版的Glibc还是单线程版的Glibc? Ans: 在Linux程序设计当中,如果一个程序被设计成可以支持单线程或多线程的模式,可以当过弱引用的方法来 ...
- 单线程与多线程网络程序架构简介
文章目录 1 单线程与多线程网络程序架构简介 1.1 服务端单线程处理多客户端 1.2 服务端多进程多端口处理多客户端 1.3 服务端多线程单端口分组处理多客户端 1.4 服务端多线程多端口分组处理多 ...
- oracle数据库开多线程,学习笔记:Oracle表数据导入 DBA常用单线程插入 多线程插入 sql loader三种表数据导入案例...
天萃荷净 oracle之数据导入,汇总开发DBA在向表中导入大量数据的案例,如:单线程向数据库中插入数据,多线程向数据表中插入数据,使用sql loader数据表中导入数据案例 1.Oracle数据库 ...
- 关于python的单线程和多线程
单线程 比如两件事,要相继执行,而不是一起执行 '''学习一下单线程和多线程的问题'''from time import ctime,sleep '''单线程''' print('单线程开始:') d ...
- Operating System-Thread(5)弹出式线程使单线程代码多线程化会产生那些有关问题
Operating System-Thread(5)弹出式线程&&使单线程代码多线程化会产生那些问题 本文主要内容 弹出式线程(Pop-up threads) 使单线程代码多线程化会产 ...
- 单线程与多线程的区别
程序是什么? 程序是由源代码生成的可执行应用. 什么是进程? 当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源. 而一个进程又是由多个线程所组成的. 什 ...
- Redis 属于单线程还是多线程?不同的版本有什么区别?
Redis 是普及率最高的技术之一,同时也是面试中必问的一个技术模块,所以从今天开始我们将从最热门的 Redis 面试题入手,更加深入的学习和了解一下 Redis. 我们本文的面试题是 Redis 属 ...
最新文章
- mysql删除有空格字符名称的触发器
- 「PKUWC2018」随机游走
- 通过Socket实现文件上传/上传文件
- python怎么输入两行_python交互模式下输入换行/输入多行命令的方法
- django设置超级管理员_Django的简介与安装
- 移植wpa_supplicant软件与DHCP软件解密WPA/WPA2 加密的无线网络
- CSS 字体风格 font-style属性
- JavaScript jQuery bootstrap css ajax
- python的调用函数_Python函数调用
- php 字符串hash比较,分析两个 url 查询字符串和 hash 的区别
- RayData大数据可视化教程(3)——用逻辑控制颜色动画切换并打包
- html5 抓取网页数据,从网页抓取数据的一般方法
- 多源信息融合_BIM+GIS的深度融合之路
- 《关键对话:如何高效能沟通(原书第2版)》 摘录及总结
- Linq to sql 求和操作
- QtWeb-用于Webkit测试的替代浏览器
- 计算机显示器接法,电脑和显示器怎么连接_显示器连接电脑方法-win7之家
- 编写Firefox扩展(翻译)
- IP地址管理工具Netbox 安装指南
- 关于串口数据处理(字符转换为十进制数值)