多线程概述
进程和线程都是 *** 作系统的概念。进程是应用程序的执行实例,每个进程是由私有的虚拟地址空间、代码、数据和其它各种系统资源组成,进程在运行过程中创建的资源随着进程的终止而被销毁,所使用的系统资源在进程终止时被释放或关闭。
线程是进程内部的一个执行单元。系统创建好进程后,实际上就启动执行了该进程的主执行线程,主执行线程以函数地址形式,比如说main或WinMain函数,将程序的启动点提供给Windows系统。主执行线程终止了,进程也就随之终止。
每一个进程至少有一个主执行线程,它无需由用户去主动创建,是由系统自动创建的。用户根据需要在应用程序中创建其它线程,多个线程并发地运行于同一个进程中。每个线程具有自己的堆栈和自己的 CPU 寄存器副本。其他资源(如文件、静态数据和堆内存)由进程中的所有线程共享。所以线程间的通讯非常方便,多线程技术的应用也较为广泛。但是使用这些公共资源的线程必须同步。Win32 提供了几种同步资源的方式,包括信号、临界区、事件和互斥体。
每个进程都有私有的虚拟地址空间,进程的所有线程共享同一地址空间。每个线程被CPU分配一个时间片,一旦被激活,它正常运行直到时间片耗尽并被挂起,此时, *** 作系统选择另一个线程进行运行。通过时间片轮转,又出于各个时间片很小(20毫秒级),看起来就像多个线程同时在工作。实际上,只有在多处理器系统上才是真正的在可得到的处理器上同时运行多个线程。基于Win32的应用程序可以通过把给定进程分解(或创建)多个线程挖掘潜在的CPU时间,而且还可以加强应用程序,以使用户提高效率,加强反应能力以及进行后台辅助处理。
在Windows *** 作系统中,Win32应用程序可以在Windows平台上运行多个实例,每个应用程序实例都是一个独立的进程,而一个进程可以由不止一个线程来实现。对于一个进程来说,当应用程序有几个任务要同时运行时,建立多个线程是有用的。如打印时,利用多线程机制实现多线程,就可在需要打印时创建一个负责完成打印功能的打印线程。创建打印线程之后,系统就变成了多线程。当进行打印时,CPU轮换着分配给这两个线程时间片,所以打印和其他功能一起同时在运行,这就充分利用了CPU处理打印工作之外的空闲时间片,并且避免了用户长久地等待打印时间。这就是所谓的由多线程来实现的多任务,在进行打印任务的同时又可以进行别的任务。要说明的一点是,目前大多数的计算机都是单处理器(CPU)的,为了运行所有这些线程, *** 作系统为每个独立线程安排一些CPU时间, *** 作系统以轮换方式向线程提供时间片,这就给人一种假象,好象这些线程都在同时运行。由此可见,如果两个非常活跃的线程为了抢夺对CPU的控制权,在线程切换时会消耗很多的CPU资源,反而会降低系统的性能。这一点在多线程编程时应该注意。
Win32 SDK函数支持进行多线程的程序设计,并提供了 *** 作系统原理中的各种同步、互斥和临界区等 *** 作。Visual C++ 60中,使用MFC类库也实现了多线程的程序设计,线程被分为工作者线程(Worker Thread)和用户界面线程(User Interface Thread)两大类。前者常用于处理后台任务,执行这些后台任务并不会耽搁用户对应用程序的使用,即用户 *** 作无需等待后台任务的完成。后者常用来独立的处理用户输入和相应用户的事件。其中用户界面线程的特点是拥有单独的消息队列,可以具有自己的窗口界面,能够对用户输入和事件做出响应。在应用程序中,根据用户界面线程具有消息队列这一特点,可以使之循环等待某一事件发生后再进行处理。由于Windows95时抢先式多任务的 *** 作系统,即使一个线程因等待某事件而阻塞,其他线程仍然可以继续执行。
1、多线程:是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。具有这种能力的系统包括对称多处理机、多核心处理器以及芯片级多处理或同时多线程处理器。
在一个程序中,这些独立运行的程序片段叫作“线程”,利用它编程的概念就叫作“多线程处理”。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。
2、多进程:Windows应用程序中消息有两种送出途径;直接和排队。Windows或某些运行的应用程序可直接发布消息给窗口过程,或者,消息可送到消息列象连续不断轮询消息队列的OS中当前执行的每个进程都事件驱动程序不是由事件的顺序来控制,而是由事件的发生来控,而事件的发生是随机的、不确定的,这就允许程序的用户用各种合理的顺序来安排程序的流程。
扩展资料:
多线程优点:
1、使用线程可以把占据时间长的程序中的任务放到后台去处理
2、用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以d出一个进度条来显示处理的进度
3、程序的运行速度可能加快
4、在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,线程就比较有用了。在这种情况下可以释放一些珍贵的资源如内存占用等等。
5、多线程技术在IOS软件开发中也有举足轻重的位置。
参考资料来源:
百度百科-多线程
百度百科-多进程
能详细说明一下买票按钮的功能是什么吗
程序有几个问题:
第一,maipiao类名要首字母大写,变量的定义尽量不要使用中文
第二,Sell A; 没有初始化,然后你就开始了调用
第三,public void actionPerformed(ActionEvent e),放在Maipiao类里面,什么时候被调用??
第四,多线程的public void run()方法,同样在Maipiao类中,可是它没有被调用
问题有不少,我实在修改不下去了,明天白天如果有空就帮你重写一个
终于给你修改完了,要的话留邮箱
线程这个概念不难理解!
====================
在解释上面这些问题的之前,我们得理解线程的一个概念。
在现代 *** 作系统中,线程是真正执行计算机 *** 作的东西,真正在 *** 作电脑的不是应用程序,不是进程,而是线程。
线程,是一个基本单位,执行 *** 作的,是线程。
应用程序与进程里面,有很多线程,像负责人机交互的窗口,它主要由 GUI 线程来控制的。
以 IE 浏览器为例,即便你只开启一个页面,你也会发现,这个浏览器程序有非常多的线程,随着打开的标签和加载项越多,它所创建的线程也就越多。
我做过一些简单的应用软件开发,对于一般应用程序来说,我们也许不考虑线程的问题,因为,关于线程的调度,我个人会让系统和编译器来完成,而我做的,仅仅是为了编写实现这个软件的功能以及代码。
上面这个截图是我编写的一个小工具,用于学习一些计算机编码的一些问题,由于这个软件是我编写的(基于 net 45 架构),所以,我对此软件最为了解。
这个程序在启动的最初状态,程序不参与任何计算工作,这个程序中,它只有简单的基本图形界面,比如:窗口 ,窗口里有一个菜单栏,在任务管理器中,它显示了这个程序只占用了 4 个线程。
当我启动一个功能的时候,这个程序的线程数一下子增加到了 16 个 。
所以,这个问题的标题,并不能很好的说明 *** 作系统的多线程。
以上就是关于“多线程”的原理是什么全部的内容,包括:“多线程”的原理是什么、什么是多线程,多进程、java多线程模拟买票问题 用图形用户界面等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)