正规制作网站公司,app开发公司查询,青县建设银行网站,天元建设集团有限公司刘士龙#x1f490;个人主页#xff1a;初晴~
#x1f4da;相关专栏#xff1a;多线程 / javaEE初阶 前言 在我们之前编写的所有代码#xff0c;都只能用上一个核心。众所周知#xff0c;现在大多数CPU都有多个核心#xff0c;但此时#xff0c;无论如法优化程序#xff0c… 个人主页初晴~
相关专栏多线程 / javaEE初阶 前言 在我们之前编写的所有代码都只能用上一个核心。众所周知现在大多数CPU都有多个核心但此时无论如法优化程序最多也只有一个CPU核心在工作其它的核心都空闲着就容易出现所谓一核有难多核围观的窘况。这时可以通过一些代码把多个CPU核心都利用起来提高运行效率这样的编程就被称为“并发编程”。而提到并发编程就离不开多进程编程和多线程编程了。这篇文章就让我们先来认识一下进程与线程吧 一、进程
1、概念 进程是计算机中正在运行的程序的实例。它是操作系统进行资源分配和调度的基本单位。每个进程都有自己的内存空间、代码、数据和执行状态。进程可以独立运行相互之间不会干扰。操作系统可以同时运行多个进程通过分配时间片轮流执行它们从而实现多任务处理。进程可以与其他进程进行通信和协作共享资源和数据。 像上图中显示的就是正在运行的程序也就是一个个系统分配的进程
2、特性
进程的特性 动态性进程的实质是程序在多道程序系统中的一次执行过程进程是动态产生动态消亡的。并发性任何进程都可以同其他进程一起并发执行独立性进程是一个能独立运行的基本单位同时也是系统分配资源和调度的独立单位异步性由于进程间的相互制约使进程具有执行的间断性即进程按各自独立的、不可预知的速度向前推进结构特征进程由程序、数据和进程控制块PCB三部分组成; 3、组织形式
一个可执行程序运行的时候操作系统就会创建进程给这个程序分配各种系统资源CPU内存硬盘网络带宽等……所谓的进程在系统中是通过PCBprocess control block这样的结构体来描述的通过双显链表的形式来组织简单来说就是“先描述再组织”的形式
描述进程使用PCB结构体描述进程的各种属性 操作系统会进行两步 为该进程创建对应的PCB对象将该进程的代码和数据加载在内存中 PCB就相当于是进程属性的集合主要描述了以下属性 标示符PID: 描述本进程的唯一标示符用来区别其他进程状态: 任务状态退出代码退出信号等。优先级: 相对于其他进程的优先级。程序计数器: 程序中即将被执行的下一条指令的地址。内存指针: 包括程序代码和进程相关数据的指针还有和其他进程共享的内存块的指针上下文数据: 进程执行时处理器的寄存器中的数据[休学例子要加图CPU寄存器]。IO状态信息: 包括显示的I/O请求,分配给进程的IO设备和被进程使用的文件列表。记账信息: 可能包括处理器时间总和使用的时钟数总和时间限制记账号等。组织进程通过双显链表将各进程的PCB串联起来 通过PCB操作系统就可以更好地去管理各个进程操作时不需要获取整个进程只需获取描述进程的PCB对象就可以找到相对应的代码与数据从而大幅节省空间开销提高效率。
二、线程 虽然多进程方式能够实现并发编程但是效率要求的提高就希望有更好的方式来实现。多进程编程最大的问题就是太“重”了创建进程和销毁进程的空间开销与时间开销都比较大一旦需求场景中需要频繁创建销毁进程时效率就非常低了。为了解决进程开销较大的问题就发明了相对轻量化的线程 线程比进程更加轻量化主要是因为创建线程省去了“分配资源”的过程销毁线程也省去了“释放资源”的过程。 一旦进程创建同时就会创建好第一个线程并分配好系统资源后续该进程创建更多线程时就不需要再分配资源了。 举个例子假设系统要执行的任务是吃掉100块肉这时系统就会创建一个进程并为这个进程分配一定资源我们这里看作是为任务执行而开辟了一个“房间”然后这个进程会创建一个线程“路飞”来真正去完成工作也就是说实际上真正完成工作的是线程进程是为线程工作提供了一定资源图中类比为了一个房间 这时我们就有两种方法来提高工作效率第一种系统在开辟一个“房间”这时每个房间要吃的肉的数量就变少了又因为每个进程的工作是独立且并行的每个进程的工作量减少总的工作效率也就提升了这就是多进程编程的原理 但是创建一个新的“房间”的开销是很大的所以为了提高效率我们可以在一个房间里放入多个“路飞”来完成工作这些“路飞”在同一个“房间”工作共用同一份资源同时去吃桌上的肉这样每个“路飞”所需要吃的肉大幅减少又因为他们可以看作是同时去吃的总的效率就能提升很多了这便是多线程编程的原理 但是只有靠近桌子的“路飞”才能吃上肉桌子的大小是有限的进程资源有限随着“路飞”数量的增加可能会有大量“路飞”线程靠近不了桌子分配不到资源从而无法进行工作造成线程的闲置这时再一味地增加线程就不能够提高效率了并且由于创建线程也是有开销的此时过多的线程反而可能会降低运行效率。 因此线程并不是越多越好的在使用是一定要控制好线程数量 三、进程与线程区别与关系 1、进程包含线程 一个进程可以有一个线程或者多个线程但不能没有线程 2、进程是系统资源分配的基本单位线程是系统调度执行的基本单位 3、同一份进程中的线程共用一份系统资源内存硬盘网络带宽等…… 内存资源就是代码中定义的变量与对象多个线程是可以是可以共用同一份变量的 4、线程是当下实现并发编程的主流方式通过多线程可以更好地利用多核CPU但线程并不是越多越好的线程数目达到一定量后已经充分利用了多核CPU的性能此时在一味地增加线程数量不但无法提高运行效率反而可能还会影响效率因为线程调度也是需要消耗资源的。 5、多个线程之间可能会互相影响一个线程抛出异常会影响其它线程的正常运行这会导致各种线程安全问题 6、多个进程之间一般不会互相影响一个进程崩了也不会影响其它进程也被称为“进程的隔离性” 总结
总之比起以前写的程序多线程编程的方法能更好地发挥多核CPU的性能大幅提高运行效率在将来工作中也是非常重要的。本篇文章我们主要简单介绍了进程与线程的关系与区别 那么本篇文章就到此为止了如果觉得这篇文章对你有帮助的话可以点一下关注和点赞来支持作者哦。作者还是一个萌新如果有什么讲的不对的地方欢迎在评论区指出希望能够和你们一起进步✊