早期的计算硬件十分复杂,但是操作系统执行的功能确十分的简单。那个时候的操作系统在任一时间点只能执行一个任务,也就是同一时间只能执行一个程序。多个任务的执行必须得轮流执行,在系统里面进行排队等候。

栗子君有话说

例子1,你正在通过你的web浏览器查看一些精彩的文章,你需要把好的文章给下载下来,可能有些非常精彩的文章你需要收藏起来,你就用你的打印机打印这些在线的文章。在这里,浏览器一边下载HTML格式的文章,一边还要打印文章。这就是一个程序同时执行多个任务,每个任务分配一个线程来完成。

例子2,大家是否有在食堂吃饭的经历,尤其是学校里面的食堂。学生有访问高峰,这就需要卖饭的大妈,身手矫健,要记下学生点的饭,之后一边做饭,一边装饭。如果生意实在太好,可以多雇人手,一起帮着卖饭。

一个食堂大妈就是进程,记菜单,做饭,装饭这些动作就是进程中线程。如果想要快速完成这些动作,食堂大妈就要在记菜单,做饭,装饭之间不停的切换,这个就是多线程。如果增加人手这个就相当于计算机增加cpu内核,他们都可以独立执行线程,这也是多线程。

线程创建原理

操作系统创建了进程后,会创建一个线程执行进程中的代码,这也就是主线程。主线程在运行过程中,可能会创建其他线程(辅助线程),这些创建的线程又可以创建其他线程,这样就使得多个线程在同一个进程中执行。每个线程都独立运行,共享进程提供的各种资源,如代码、数据、虚拟地址空间等,每个线程可以执行进程中的不同代码,进程中的同一段代码也可以由多个线程执行(可以同时被多个线程访问的代码、数据等资源就是临界资源)。

线程就是程序中的一个执行路径, 它在进程上下文中执行,有一定的生命周期。

线程是这样一种机制,它允许在程序中并发执行多个指令流,每个指令流都称为一个线程,彼此间互相独立。 线程又称为轻量级进程,它和进程一样拥有独立的执行控制,由操作系统负责调度,区别在于线程没有独立的存储空间,而是和所属进程中的其它线程共享一个存储空间,这使得线程间的通信远较进程简单。

多个线程的执行是并发的,也就是在逻辑上“同时”,而不管是否是物理上的“同时”。如果系统只有一个CPU,那么真正的“同时”是不可能的,但是由于CPU的速度非常快,用户感觉不到其中的区别,因此我们也不用关心它,只需要设想各个线程是同时执行即可。

单线程和多线程的比较

多线程和传统的单线程在程序设计上最大的区别在于,由于各个线程的控制流彼此独立,使得各个线程之间的代码是乱序执行的,由此带来的线程调度,同步等问题

单线程和多线程执行效率,有时往往是因为线程中断,多线程可以执行其他的无关的线程,提高cpu的利用率。整体来看的话,是多线程对资源的利用率高,所有才会觉得多线程执行时间比单线程短

多线程的缺点

上面说了很多基本上都是多线程带来的优点,这里说点它的缺点。如果一个程序有很多的线程,那么其他程序的线程必然只能占用更少的CPU时间;而且大量的CPU时间是用于线程调度的;操作系统也需要足够的内存空间来维护每个线程的上下文信息;因此,大量的线程会降低系统的运行效率。

关于多线程这一块还得再写个demo,后面会分享,欢迎大家阅读!

多线程不能不知道的之单线程和多线程的比较相关推荐

  1. 关于多线程编程您不知道的 5 件事 有关高性能线程处理的微妙之处

    虽然很少有 Java™ 开发人员能够忽视多线程编程和支持它的 Java 平台库,更少有人有时间深入研究线程.相反地,我们临时学习线程,在需要时向我们的工具箱添加新的技巧和技术.以这种方式构建和运行适当 ...

  2. 单线程和多线程的优缺点(转)

    多线程处理的优点 同步应用程序的开发比较容易,但由于需要在上一个任务完成后才能开始新的任务,所以其效率通常比多线程应用程序低.如果完成同步任务所用的时间比预计时间长,应用程序可能会不响应.多线程处理可 ...

  3. Problem 58 怎样判断当前程序链接的是多线程版的Glibc还是单线程版的Glibc?

    Problem58 怎样判断当前程序链接的是多线程版的Glibc还是单线程版的Glibc? Ans: 在Linux程序设计当中,如果一个程序被设计成可以支持单线程或多线程的模式,可以当过弱引用的方法来 ...

  4. 单线程与多线程网络程序架构简介

    文章目录 1 单线程与多线程网络程序架构简介 1.1 服务端单线程处理多客户端 1.2 服务端多进程多端口处理多客户端 1.3 服务端多线程单端口分组处理多客户端 1.4 服务端多线程多端口分组处理多 ...

  5. oracle数据库开多线程,学习笔记:Oracle表数据导入 DBA常用单线程插入 多线程插入 sql loader三种表数据导入案例...

    天萃荷净 oracle之数据导入,汇总开发DBA在向表中导入大量数据的案例,如:单线程向数据库中插入数据,多线程向数据表中插入数据,使用sql loader数据表中导入数据案例 1.Oracle数据库 ...

  6. 关于python的单线程和多线程

    单线程 比如两件事,要相继执行,而不是一起执行 '''学习一下单线程和多线程的问题'''from time import ctime,sleep '''单线程''' print('单线程开始:') d ...

  7. Operating System-Thread(5)弹出式线程使单线程代码多线程化会产生那些有关问题

    Operating System-Thread(5)弹出式线程&&使单线程代码多线程化会产生那些问题 本文主要内容 弹出式线程(Pop-up threads) 使单线程代码多线程化会产 ...

  8. 单线程与多线程的区别

    程序是什么? ​ 程序是由源代码生成的可执行应用. 什么是进程? ​ 当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源. 而一个进程又是由多个线程所组成的. 什 ...

  9. Redis 属于单线程还是多线程?不同的版本有什么区别?

    Redis 是普及率最高的技术之一,同时也是面试中必问的一个技术模块,所以从今天开始我们将从最热门的 Redis 面试题入手,更加深入的学习和了解一下 Redis. 我们本文的面试题是 Redis 属 ...

最新文章

  1. mysql删除有空格字符名称的触发器
  2. 「PKUWC2018」随机游走
  3. 通过Socket实现文件上传/上传文件
  4. python怎么输入两行_python交互模式下输入换行/输入多行命令的方法
  5. django设置超级管理员_Django的简介与安装
  6. 移植wpa_supplicant软件与DHCP软件解密WPA/WPA2 加密的无线网络
  7. CSS 字体风格 font-style属性
  8. JavaScript jQuery bootstrap css ajax
  9. python的调用函数_Python函数调用
  10. php 字符串hash比较,分析两个 url 查询字符串和 hash 的区别
  11. RayData大数据可视化教程(3)——用逻辑控制颜色动画切换并打包
  12. html5 抓取网页数据,从网页抓取数据的一般方法
  13. 多源信息融合_BIM+GIS的深度融合之路
  14. 《关键对话:如何高效能沟通(原书第2版)》 摘录及总结
  15. Linq to sql 求和操作
  16. QtWeb-用于Webkit测试的替代浏览器
  17. 计算机显示器接法,电脑和显示器怎么连接_显示器连接电脑方法-win7之家
  18. 编写Firefox扩展(翻译)
  19. IP地址管理工具Netbox 安装指南
  20. 关于串口数据处理(字符转换为十进制数值)

热门文章

  1. 咏南linux中间件状态查看,咏南跨平台中间件
  2. 记一次macbook pro A1708更换电池的经历
  3. Jmeter5.x线程组setUp-tearDown和调度器实战
  4. 微信二维码使用及配置
  5. Jenkins的全量迁移
  6. ADS学习:统计分析——蒙特卡洛分析、良率分析
  7. 看网易云公开课代码性能开发有感,怎样提高代码的性能
  8. 网络计算机抗震计算阻尼比,抗震结构设计经典计算题及答案.doc
  9. NFC模组,开发NFC功能 只要几条指令的事情
  10. android应用商店代码,仿小米应用商店Android客户端