
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
Java编程开发语言是目前大多数人在转行软件开发行业的时候会去学习的一种编程开发语言,而本文我们就通过案例分析来简单了解一下,Java编程程序、线程、进程和超线程分享。
程序程序是一组指令的有序集合。它本身没有任何运行的含义,只是存在于计算机系统的硬盘等存储空间中一个静态的实体文件。比如Linux系统下的binaryexcutable,windows系统下的exe
进程进程是处于动态条件下由操作系统维护的系统资源管理实体。进程具有自己的生命周期,反映了一个程序在一定的数据集上运行的全部动态过程。需要加载到内存中,点开一个exe就是开启了一个进程
线程。线程则是进程的一个实体,是比进程更小的能独立运行的基本单位,是被系统调度和分配的基本单元。线程自身基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器、一组寄存器和调用堆栈),但它与同属一个进程的其他线程共享所属进程所拥有的全部资源,同一个进程的多个线程可以并发执行,从而提高了系统资源的利用率
超线程超线程技术就是利用特殊的硬件指令,把两个逻辑内核模拟成两个物理芯片,让单颗CPU都能进行线程级并行计算,进而兼容多线程操作系统和软件。一般一个CPU对应一个线程,通过超线程可以达到比如8核16线程
老生常谈,线程和进程的区别和联系:
一个程序的执行至少有一个进程,一个进程至少包含一个线程(主线程)。
线程的划分尺度小于进程,所以多线程程序并发性更高。
进程是系统进行资源分配和调度的一个独立单位,线程是CPU调度和分派的基本单位。同一进程内允许多个线程共享其资源。
进程拥有独立的内存单元,即进程之间相互独立;同一进程内多个线程共享内存。因此,线程间能通过读写操作对它们都可见的内存进行通信,而进程间的相互通信则需要借助于消息的传递。
每个线程都有一个程序运行的入口,顺序执行序列和程序运行的出口,但线程不能单独执行,必须依存于进程中,由进程控制多个线程的执行
进程比线程拥有更多的相应状态,所以创建或销毁进程的开销要比创建或销毁线程的开销大得多。因此,进程存在的时间长,而线程则随着计算的进行不断地动态地派生和缩并。
一个线程可以创建和撤销另一个线程。而且同一进程中的多个线程共享所属进程所拥有的全部资源;同时进程之间也可以并行执行,从而更好地改善了系统资源的利用率。
线程绑定
计算机系统是由一个或多个物理处理器和内存组成,运行的程序会将内存分为两个部分,一部分是共享变量使用的存储区域,另一部分供各线程的私有变量使用的存储区域。线程绑定是将线程绑定在固定的处理器上,从而在线程与处理器之间建立一对一的映射关系。如果不进行线程绑定,线程可能在不同的时间片运行在不同的处理器上。我们知道,每个处理器是有自己的多级缓存的,如果线程切来切去,那么cache命中率肯定不高,程序性能也会受到影响。通过线程绑定,程序能够获得更高的cache利用率从而提高程序性能。
并行算法评价
理论上来说,n个相同的cpu理论上能提供n倍的计算能力。
但是在实际过程中,并行开销会导致总的执行时间无法线性地减少。这些开销分别为:
线程的建立和销毁、线程和线程之间的通信、线程间的同步等因素造成的开销。
存在不能并行化的计算代码,造成计算由单个线程完成,而其他线程则处于闲置状态。
为争夺共享资源而引起的竞争造成的开销。
由于各cpu工作负载分配的不均衡和内存带宽等因素的限制,一个或多个线程由于缺少工作或因为等待特定事件的发生无法继续执行而处于空闲状态。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!更多内容请加danei456学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。