操作系统中同时执行多个程序原因:

1、资源利用率:系统资源及硬件资源。当一个程序再等待另一个程序时,可以运行另一个程序,可提高资源利用率。

2、公平性:多个程序对计算机上的资源理论上具有同等的使用权。可以通过时间分片等手段使程序共享计算机资源,非一个程序从头到尾执行完毕后,另一个程序才可以得到执行。

3、协作高效:执行多个任务时,应该使用多个程序,然后由这些程序相互通信相互调用,比编写一个程序实现所有任务更容易实现。

串行编程模型优势:直观和简单。按照顺序执行时促使了进程的出现。

进程与线程的关系:

一个进程可以包含多个线程,线程即是一个进程中为提高单个进程执行效率而出现的。现代操作系统基本以线程为基本的调度单位,而不是进程。

线程共享所处进程范围内的资源,比如内存句柄和文件句柄,线程独占各自的程序计数器、栈及局部变量。线程可根据多处理器系统的硬件达到更好的并行性。如果无协同机制,线程可在进程中独立执行。

线程的优势:

1、通过更高效的使用系统资源,有效降低程序的开发和维护成本,提升复杂应用的性能。线程使用得当可降低编程人员代码的复杂度,使代码更容易编写、阅读和维护。发挥多处理器的强大能力。

2、建模的简易性,当一个多任务的程序在执行时,通过将每个任务分配给专门的线程去执行,这样程序的执行逻辑、调度机制、交替执行的操作、异步I/O以及资源等待等问题分离,达到将复杂的的工作流进一步分解,成为一组简单并且同步的工作流,每个工作流在专门的线程中进行,在特定的同步位置进行交互。

3、异步事件的简化处理,单线程请求会出现I/O阻塞情况,某个请求出现阻塞,其他请求需要同步等待。多线程会对每个请求都分配一个专门的线程进行处理,这样请求间是非阻塞I/O。

线程的风险:

1、线程安全性:在没有充足的同步情况下,多个线程中的操作执行顺序是不可预测的。比如  a=1,a++;这种竞态条件问题,多线程下并不安全。

只有将a=1,a++所在方法设置为需同步的(通常使用synchronized关键字)才是线程安全的。

2、活跃性:活跃性问题的形式之一就是“无限循环”,从而使得循环之后的代码无法得到执行。线程的活跃性问题还有:锁等待、死锁、饥饿、活锁。

3、性能问题:频繁的上下文切换操作、cpu调度耗时高于线程执行时间、同步导致的内存总线同步流量增加、编译器对代码的优化被抑制。

最新文章

  1. virtualbox linux虚拟机相关
  2. 【数据挖掘】朴素贝叶斯算法计算ROC曲线的面积
  3. SQL Server 2012 学习笔记1
  4. Redis安全访问
  5. Java Hour 56 Spring 和 Hibernate 的集成
  6. [geeksforgeeks] Bottom View of a Binary Tree
  7. IOS Note - Core NS Data Types
  8. SDAU课程练习--problemE
  9. org.thymeleaf.exceptions.TemplateProcessingException: Exception evaluating SpringEL expression
  10. 记使用expo与expoKit分离工程遇到的坑
  11. 用 EPWA 写一个 图片播放器 PicturePlayer
  12. asp.net core认证和授权的初始认识--claim、claimsidentity、claimsprincipal
  13. Unity3D料槽设备旋转(一)
  14. Java 之 XML
  15. sql 索引笔记--索引组织结构
  16. FastDFD安装遇到的问题
  17. JAVA中线程池的简单使用
  18. grub24dos
  19. 洛谷P4344 脑洞治疗仪 [SHOI2015] 线段树+二分答案/分块
  20. PHP 中的文本截取分析之效率

热门文章

  1. 【PAT甲级】1043 Is It a Binary Search Tree (25 分)(判断是否为BST的先序遍历并输出后序遍历)
  2. Python 之并发编程之线程上
  3. Python 爬取 热词并进行分类数据分析-[数据修复]
  4. ADO.Net实体数据模型添加DB-First/Code First报错
  5. Mybatis笔记一
  6. 关于c++的头文件和变量声明
  7. swoole 监控文件改动
  8. C++ — 后缀表达式转表达式树
  9. Ubuntu18.04-MySQL8.0-表名大小写敏感-远程连接
  10. SpringBoot 处理异常的几种常见姿势